r - 删除 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)
但我的问题有点复杂。尽管x2
有NA
,但我不需要删除有NA
for 的行x2
。有价值的数据是有值的地方,x1
而不是x2
,如果行中有观察值,x1
但x2
没有其他变量,则不应删除该行。因此,不应删除第一行和第四行。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
这里第一行有NA
forx2
和NA
其他变量,第二行有NA
for x2
,但另一个变量不是 NA。在这种情况下,如何只留下有值的行,没有x1
值x2
,但另一个变量有值?
解决方案
所以也许你正在寻找
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
具有NA
OR 行中的所有值都是非 NA 的行。
推荐阅读
- java - 如何解决 OutOfMemoryError: Java heap space when traversing to find all possible paths with large graph?
- html - 如何停止导航栏引起的滚动
- python - 尝试迭代 OrderedDict() 时,错误无法解压不可迭代
- python - TypeError:无法将 builtin_function_or_method 转换为张量或操作
- javascript - 如何使用正则表达式获取 Aadhar 号码的最后一个字符
- c++ - 如何在 void 函数和 do-while 循环 C++ 中回显输入
- javascript - 如何垂直对齐容器中的文本,
- android - 我的 android 应用程序可以在某些设备上运行,而其他相同类型的应用程序在工厂休息之前无法运行
- c++ - 堆栈本地对象的使用和对象的销毁之间是否存在发生关系?
- swift - 只选择 UIBezierPath 按钮内的点