首页 > 解决方案 > 删除 NA 数据,但在 R 中有一定的条件

问题描述

让我们看看示例数据

nad=structure(list(x1 = 1:5, x2 = c(NA, 2L, 2L, NA, 34L), x3 = c(NA, 
1L, NA, NA, NA), x4 = c(NA, 2L, 5L, NA, NA), x5 = c(NA, 3L, NA, 
NA, NA), x6 = c(NA, 4L, NA, NA, NA)), .Names = c("x1", "x2", 
"x3", "x4", "x5", "x6"), class = "data.frame", row.names = c(NA, 
-5L))
  x1 x2 x3 x4 x5 x6
1  1 NA NA NA NA NA
2  2  2  1  2  3  4
3  3  2 NA  5 NA NA
4  4 NA NA NA NA NA
5  5 34 NA NA NA NA

通常要获得完整的数据NA,我可以使用此功能

na.omit(nad)

但我的问题有点复杂。尽管x2NA,但我不需要删除有NAfor 的行x2。有价值的数据是有值的地方,x1而不是x2,如果行中有观察值,x1x2没有其他变量,则不应删除该行。因此,不应删除第一行和第四行。3 和 5 应该删除,因为这里,一方面有对x1和的观察x2,但其他变量是空白的。第二行完全完整,我不需要删除它。如何NA使用这种条件删除?期望的输出

  x1 x2 x3 x4 x5 x6
1  1 NA NA NA NA NA
2  2  2  1  2  3  4
3  4 NA NA NA NA NA

作为补充(单独的问题,但相邻),我也想在这里问,如果有这种情况我可能需要这个来分析

  x1 x2 x3 x4 x5 x6
1  1 NA NA NA NA NA
2  2 NA  1  1  1  1

这里第一行有NAforx2NA其他变量,第二行有NAfor x2,但另一个变量不是 NA。在这种情况下,如何只留下有值的行,没有x1x2,但另一个变量有值?

标签: rdplyr

解决方案


所以也许你正在寻找

nad[!is.na(nad$x1) & is.na(nad$x2) | rowSums(!is.na(nad)) == ncol(nad), ]

#  x1 x2 x3 x4 x5 x6
#1  1 NA NA NA NA NA
#2  2  2  1  2  3  4
#4  4 NA NA NA NA NA

这将选择x1具有非 NA 值并且x2具有NAOR 行中的所有值都是非 NA 的行。


推荐阅读