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