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)