R 每行,哪些列是NA

R 每行,哪些列是NA,r,R,数据框“d”中的每行,我想知道哪些列不包含NA。我想要的输出是哪些列。有什么建议吗?谢谢 a <- c(1,3,4,5,NA) b <- c(1,NA,NA,5,9) c <- c(NA,3,4,5,3) d <- data.frame(a,b,c) d a b c 1 1 NA 3 NA 3 4 NA 4 5 5 5 NA 9 3 按行使用apply cols <- names(d) apply(!is.na(d), 1

数据框“d”中的每行,我想知道哪些列不包含NA。我想要的输出是哪些列。有什么建议吗?谢谢

a <- c(1,3,4,5,NA)
b <- c(1,NA,NA,5,9)
c <- c(NA,3,4,5,3)

d <- data.frame(a,b,c)
d
  a  b  c
  1  1 NA
  3 NA  3
  4 NA  4
  5  5  5
 NA  9  3

按行使用
apply

cols <- names(d)
apply(!is.na(d), 1, function(x) toString(cols[x]))
#[1] "a, b"    "a, c"    "a, c"    "a, b, c" "b, c" 
cols
a一个选项可以是:

which(!sapply(d, is.na), arr.ind = TRUE)

      row col
 [1,]   1   1
 [2,]   2   1
 [3,]   3   1
 [4,]   4   1
 [5,]   1   2
 [6,]   4   2
 [7,]   5   2
 [8,]   2   3
 [9,]   3   3
[10,]   4   3
[11,]   5   3

使用
collapse
中的
dapply
,这将在行计算中更有效

library(collapse)
nm1 <- names(d)
dapply(d, FUN = function(x) toString(nm1[!is.na(x)]), MARGIN = 1)
#[1] "a, b"    "a, c"    "a, c"    "a, b, c" "b, c"   
库(折叠)
nm1
which(!sapply(d, is.na), arr.ind = TRUE)

      row col
 [1,]   1   1
 [2,]   2   1
 [3,]   3   1
 [4,]   4   1
 [5,]   1   2
 [6,]   4   2
 [7,]   5   2
 [8,]   2   3
 [9,]   3   3
[10,]   4   3
[11,]   5   3
library(collapse)
nm1 <- names(d)
dapply(d, FUN = function(x) toString(nm1[!is.na(x)]), MARGIN = 1)
#[1] "a, b"    "a, c"    "a, c"    "a, b, c" "b, c"