对于NA的处理方式

示例数据

生成存在NA的示例数据,实际操作应根据实际表达矩阵。

  1. > library(tidyr)
  2. > X<-data.frame(X1 = LETTERS[1:5],X2 = 1:5)
  3. > X[2,2] <- NA
  4. > X[4,1] <- NA
  5. > X
  6. X1 X2
  7. 1 A 1
  8. 2 B NA
  9. 3 C 3
  10. 4 <NA> 4
  11. 5 E 5

去除含NA的行

可以根据某一列来选择,也可以全局选择

  1. > drop_na(X)
  2. X1 X2
  3. 1 A 1
  4. 2 C 3
  5. 3 E 5
  6. > drop_na(X,X1)
  7. X1 X2
  8. 1 A 1
  9. 2 B NA
  10. 3 C 3
  11. 4 E 5
  12. > drop_na(X,X2)
  13. X1 X2
  14. 1 A 1
  15. 2 C 3
  16. 3 <NA> 4
  17. 4 E 5

替换NA

可以选择一列,也可以全局选择,在list()函数中修改即可。

  1. > replace_na(X$X1, 0)
  2. [1] "A" "B" "C" "0" "E"
  3. > replace_na(X,list(X2=0))
  4. X1 X2
  5. 1 A 1
  6. 2 B 0
  7. 3 C 3
  8. 4 <NA> 4
  9. 5 E 5
  10. > replace_na(X,list(X1=0, X2=0))
  11. X1 X2
  12. 1 A 1
  13. 2 B 0
  14. 3 C 3
  15. 4 0 4
  16. 5 E 5

上一行填充

可以使用上一行的数据填充NA,可以选择一列,也可以选择多列。

  1. > X
  2. X1 X2
  3. 1 A 1
  4. 2 B NA
  5. 3 C 3
  6. 4 <NA> 4
  7. 5 E 5
  8. > fill(X,X2)
  9. X1 X2
  10. 1 A 1
  11. 2 B 1
  12. 3 C 3
  13. 4 <NA> 4
  14. 5 E 5
  15. > fill(X,c(X1,X2))
  16. X1 X2
  17. 1 A 1
  18. 2 B 1
  19. 3 C 3
  20. 4 C 4
  21. 5 E 5

花样连接

可以通过不同的方式把两个数据框连接到一起形成新的数据框。

  1. > test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'),
  2. + blood_type = c("A","B","O","AB"))
  3. > test1
  4. name blood_type
  5. 1 jimmy A
  6. 2 nicker B
  7. 3 Damon O
  8. 4 Sophie AB
  9. > test2 <- data.frame(name = c('Damon','jimmy','nicker','tony'),
  10. + group = c("group1","group1","group2","group2"),
  11. + vision = c(4.2,4.3,4.9,4.5))
  12. > test2
  13. name group vision
  14. 1 Damon group1 4.2
  15. 2 jimmy group1 4.3
  16. 3 nicker group2 4.9
  17. 4 tony group2 4.5
  1. > library(dplyr)
  2. > test1
  3. name blood_type
  4. 1 jimmy A
  5. 2 nicker B
  6. 3 Damon O
  7. 4 Sophie AB
  8. > test2
  9. name group vision
  10. 1 Damon group1 4.2
  11. 2 jimmy group1 4.3
  12. 3 nicker group2 4.9
  13. 4 tony group2 4.5
  14. > inner_join(test1,test2,by="name")
  15. name blood_type group vision
  16. 1 jimmy A group1 4.3
  17. 2 nicker B group2 4.9
  18. 3 Damon O group1 4.2
  19. > right_join(test1,test2,by="name")
  20. name blood_type group vision
  21. 1 jimmy A group1 4.3
  22. 2 nicker B group2 4.9
  23. 3 Damon O group1 4.2
  24. 4 tony <NA> group2 4.5
  25. > full_join(test1,test2,by="name")
  26. name blood_type group vision
  27. 1 jimmy A group1 4.3
  28. 2 nicker B group2 4.9
  29. 3 Damon O group1 4.2
  30. 4 Sophie AB <NA> NA
  31. 5 tony <NA> group2 4.5
  32. > semi_join(test1,test2,by="name")
  33. name blood_type
  34. 1 jimmy A
  35. 2 nicker B
  36. 3 Damon O
  37. > anti_join(test1,test2,by="name")
  38. name blood_type
  39. 1 Sophie AB