簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM