对于NA的处理方式
示例数据
生成存在NA的示例数据,实际操作应根据实际表达矩阵。
> library(tidyr)> X<-data.frame(X1 = LETTERS[1:5],X2 = 1:5)> X[2,2] <- NA> X[4,1] <- NA> XX1 X21 A 12 B NA3 C 34 <NA> 45 E 5
去除含NA的行
可以根据某一列来选择,也可以全局选择。
> drop_na(X)X1 X21 A 12 C 33 E 5> drop_na(X,X1)X1 X21 A 12 B NA3 C 34 E 5> drop_na(X,X2)X1 X21 A 12 C 33 <NA> 44 E 5
替换NA
可以选择一列,也可以全局选择,在list()函数中修改即可。
> replace_na(X$X1, 0)[1] "A" "B" "C" "0" "E"> replace_na(X,list(X2=0))X1 X21 A 12 B 03 C 34 <NA> 45 E 5> replace_na(X,list(X1=0, X2=0))X1 X21 A 12 B 03 C 34 0 45 E 5
上一行填充
可以使用上一行的数据填充NA,可以选择一列,也可以选择多列。
> XX1 X21 A 12 B NA3 C 34 <NA> 45 E 5> fill(X,X2)X1 X21 A 12 B 13 C 34 <NA> 45 E 5> fill(X,c(X1,X2))X1 X21 A 12 B 13 C 34 C 45 E 5
花样连接
可以通过不同的方式把两个数据框连接到一起形成新的数据框。
> test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'),+ blood_type = c("A","B","O","AB"))> test1name blood_type1 jimmy A2 nicker B3 Damon O4 Sophie AB> test2 <- data.frame(name = c('Damon','jimmy','nicker','tony'),+ group = c("group1","group1","group2","group2"),+ vision = c(4.2,4.3,4.9,4.5))> test2name group vision1 Damon group1 4.22 jimmy group1 4.33 nicker group2 4.94 tony group2 4.5
> library(dplyr)> test1name blood_type1 jimmy A2 nicker B3 Damon O4 Sophie AB> test2name group vision1 Damon group1 4.22 jimmy group1 4.33 nicker group2 4.94 tony group2 4.5> inner_join(test1,test2,by="name")name blood_type group vision1 jimmy A group1 4.32 nicker B group2 4.93 Damon O group1 4.2> right_join(test1,test2,by="name")name blood_type group vision1 jimmy A group1 4.32 nicker B group2 4.93 Damon O group1 4.24 tony <NA> group2 4.5> full_join(test1,test2,by="name")name blood_type group vision1 jimmy A group1 4.32 nicker B group2 4.93 Damon O group1 4.24 Sophie AB <NA> NA5 tony <NA> group2 4.5> semi_join(test1,test2,by="name")name blood_type1 jimmy A2 nicker B3 Damon O> anti_join(test1,test2,by="name")name blood_type1 Sophie AB
