gpt4 book ai didi

r - 如何查找多列的每一行是否有NA?

转载 作者:行者123 更新时间:2023-12-04 02:27:17 29 4
gpt4 key购买 nike

我在 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) |是.na(C) | ...。有什么方法可以有效地完成这项工作吗?

预期输出如下:

enter image description here

最佳答案

你在正确的道路上:

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 值的数量与 length(test.vars) 相同,则读取赋值 1。

或者以其他方式:

df %>% mutate(null_message = as.numeric(rowSums(!is.na(.[test.vars])) == 0))

如果行中非 NA 值的数量为 0,则读取赋值 1。

关于r - 如何查找多列的每一行是否有NA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66576612/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com