[英]How to find if there are NA in each row in multiple columns?
我在 R 中有這個 dataframe
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) |...
is.na(A) | is.na(B) | is.na(C) |...
is.na(A) | is.na(B) | is.na(C) |...
. 有沒有辦法可以有效地完成這項工作?
預期的 output 如下:
您走在正確的道路上:
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。
你可以這樣做:
df %>%
rowwise %>%
mutate(null_message = as.integer(all(c(A,B,C,D,E) %in% NA)))
# A tibble: 6 x 7
# Rowwise:
S.No A B C D E null_message
<int> <int> <int> <chr> <int> <chr> <int>
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.