Chào mừng đến với BIS Đăng nhập | Đăng ký | Trợ giúp
trong Tìm kiếm

Làm việc với dataframe trong R

Bài cuối 12-26-2016 10:38 AM của chucnv. 0 trả lời.
Trang 1 trong số 1 (1 nội dung)
Sắp xếp bài viết: Trước Tiếp theo
  • 12-26-2016 10:38 AM

    • chucnv
    • 10 thành viên năng nổ nhất
    • Tham gia 12-05-2008
    • Điểm 9,460

    Làm việc với dataframe trong R

    Làm việc với dataframe trong R

    chuc1803@gmail.com

    Data frame là đối tượng được dùng phổ biến nhất trong R để lưu trữ dữ liệu.  Một data frame cũng giống như một ma trận (matrix) có dòng (rows) và cột (columns). Tuy nhiên không giống như ma trận, các cột trong data frame có tên gọi và kiểu dữ liệu khác nhau.

    Tạo mới một data frame (data.frame)

    id=c(1,2,3,4) # Tạo vector id

    name=c("Chuc", "Khoa", "Nguyet","Minh") # tạo vector name

    sex=c("Male", "Male", "Female", "Male") # tạo vector sex

    data=data.frame(id,name,sex) # tạo data frame có tên data gồm 3 cột


    Tạo trực tiếp một data frame như sau:

    person=data.frame(id=c(1,2,3),name=c("Chuc", "Khoa", "Nguyet"), sex=c("Male","Male","Female"))

    Truy xuất dữ liệu trong data frame

    Truy xuất dữ liệu tròn data frame giống như truy xuất dữ liệu trong ma trận thông qua chỉ số dòng và cột.

    data[1,2] # dòng 1 cột 2

    data[1,] # dòng thứ 1, tất cả các cột

    data[,2] hoặc data["name"] # thông tin cột thứ 2 (tất cả các dòng)

    data[1:2,2:3] # dòng 1 đến 2, cột 2 đến 3

    data[sex=="Male",] # hiển thị các người có giới tính Nam

     

    #Thêm cột mới vào data frame (DF$Col)

    data$age=c(40,12,37,39) # thêm cột age vào data frame data 

     

    Trích xuất dữ liệu từ data frame (subset)

    male=subset(data,sex=="Male") # trích ra những người là Nam

    maleadult=subset(data,sex=="Male" & age>20) # trích ra những người là nam tuổi >20

    Chọn ngẫu nhiên các phần từ trong data frame (sample)

    rand=sample(nrow(data),2, replace=FALSE) # tạo 2 (hoặc n) giá trị ngẫu nhiên từ 1 đến số dòng (nrow) trong data frame data, không lặp lại

    dataSample=data[rand,] # trích ra các dòng dữ liệu theo các giá trị ngẫu nhiên

    data1=data[-rand,] # các dòng dữ liệu còn lại

    Sắp xếp dữ liệu trong data frame (order)

    dat1=data[order(age),] # xếp tăng dần theo cột age

    dat2=data[order(-age),] # xếp giảm dần theo cột age

    print(data[order(age),]) # không tạo biến mới, chỉ xem dữ liệu xếp tăng dần theo age

    Tạo biến mới trong data frame bằng  coding

    #tạo cột gender trong data frame data, nhận giá trị là 1 nếu sex=Male và 0 nếu sex= Female

    data$gender[sex=="Male"]=1

    data$gender[sex=="Female"]=0


    Chuyển kiểu dữ liệu (as.character, as.numeric)

    Để thực hiện chuyển đổi kiểu dữ liệu trong R ta sử dụng as.character(var) để chuyển đối tượng var thành ký tự.  Để chuyển sang kiểu dữ liệu số ta sử dụng hàm as.numeric(var)

    Ví dụ: age1=as.character(age)  bây giờ age1 có kiểu dữ liệu là character và ta không thể thực hiện các phép tính số học trên đối tượng age1.

    Hợp nhất dữ liệu (merge)

    id=c(1,2,3) # tạo vector id gồm 3 phần tử

    sex=c("Male", "Male", "Female") #tạo vector sex

    data1=data.frame(id,sex) # tạo data frame data1 gồm 2 cột id và sex

    id=c(1,2,3,4) # tạo vector id gồm 4 phần tử

    age=c(30,34,37,40)

    data2=data.frame(id,age) # tạo data frame  data2

    data=merge(data1,data2, by ="id") # hợp nhất 2 data frame

    dataAll=merge(data1, data2, by="id", all.x = T, all.y=T) # hợp nhất 2 data frame với tất cả các dòng (xem kết quả)


    Hoán chuyển dữ liệu (reshape)

    Chuyển cột thành dòng ( melt)

    id=c(1,2,3)

    age=c(20,34,29)

    smokeDay1=c(7,15,24) #Number of cigarettes smoked per day

    smokeDay2=c(9,12,27)

    smokeDay3=c(12,17,19)

    data=data.frame(id,age,smokeDay1,smokeDay2,smokeDay3) 

     

    data1=melt(data, id=c("id","age"), measure.vars=c("smokeDay1", "smokeDay2","smokeDay3"))


    Chuyển dòng thành cột  (cast)

    data2= cast(data1,id+age~variable)


    • Điểm chủ đề: 20
Trang 1 trong số 1 (1 nội dung)
Powered by Community Server (Commercial Edition), by Telligent Systems