r - 如何查找多列中的每一行是否有NA?
问题描述
我在 R 中有这个数据框
df <- structure(list(S.No = c(1L, 2L, 3L, 8L, 5L, 6L), A = c(8L, 8L,
5L, 2L, NA, 3L), B = c(5L, 8L, 8L, 2L, NA, 3L), C = c("8", "test",
"error", "3", NA, "3"), D = c(5L, 5L, 3L, 3L, NA, 8L), E = c("test",
"8", "8", "error", NA, "3")), class = "data.frame", row.names = c(NA,
-6L))
我需要确定每行的所有列值是否都有 NA。它需要按行排列,但我无法让它工作。这是我迄今为止尝试过的
test.vars = c("A","B","C","D","E")
df %>% mutate(null_message = as.numeric(is.na(rowSums(.[test.vars]))))
如果我的列只有数值,则此方法有效。所以,我尝试做其他事情:
df %>% mutate(null_message = any(is.na((.[test.vars]))))
但这不起作用。它将所有行显示为TRUE
,我知道为什么。我可以使用|
,但这样做似乎有点乏味is.na(A) | is.na(B) | is.na(C) | ...
。有没有办法可以有效地完成这项工作?
预期的输出如下:
解决方案
你在正确的道路上:
library(dplyr)
test.vars = c("A","B","C","D","E")
df %>% mutate(null_message = as.numeric(rowSums(is.na(.[test.vars])) == length(test.vars)))
# S.No A B C D E null_message
#1 1 8 5 8 5 test 0
#2 2 8 8 test 5 8 0
#3 3 5 8 error 3 8 0
#4 8 2 2 3 3 error 0
#5 5 NA NA <NA> NA <NA> 1
#6 6 3 3 3 8 3 0
NA
如果行中的值的数量与 相同,则这将读取分配 1 length(test.vars)
。
或以其他方式:
df %>% mutate(null_message = as.numeric(rowSums(!is.na(.[test.vars])) == 0))
NA
如果该行中非值的数量为 0,则这将读取分配 1 。
推荐阅读
- python - 使用内部连接的python mysql更新
- r - 用 ggmap 和 geom_path 绘制街道
- ios - 为什么在设备旋转的纵向模式下没有专门调用 UICollectionViewDelegateFlowLayout 方法?
- visual-studio - 在哪里可以找到 Visual Studio 2017 中的调用堆栈
- javascript - react-native-sqlite-storage 简单的 dao
- javascript - 如何创建具有属性的新产品?
- python-3.x - 从python中的包导入错误
- python - 创建 metadata.json 文件失败
- java - 输入其中一个后如何设置不可编辑的其他EditText?
- python - Python 如何将 MessageboxW 保持在所有其他窗口之上?