如何按行显示缺失变量的名称?

How to show names of missing variables rowwise?

我确实有一个问题,我一个人无法解决。对不起,我是新手,我已经尝试了很多不同的东西。 我确实有一个包含 23 个参与者和 40 个变量的数据框。我想生成一个新的文本文件,说明每个参与者缺少哪些变量。我所做的是:

miss_val=vector(mode='list',length=num_participants)
for ( i in 1:num_participants){
  miss_val[i]=sum(is.na(data[i,]))
}

这给了我每个参与者缺失值的总和。现在我想为每个参与者写一个句子,指定缺少哪些变量。我使用了 which(is.na(data[i,]) ,它只给出了不同缺失值的位置——我怎样才能得到名字?我也试过:colnames( which( is.na (data[i,]) 也不行。

没有提供数据,但您可以试试这个:

 apply(dat, 1, function(x) { list(names(x)[ is.na(x) ] } )

结果将不是数据框,而是一个列表,其第 n 个条目的字符值是按行缺失元素的列名。

> dat <- data.frame( x=c(NA, 1:4),y=c("a",NA,"b","c","d"), z=c( NA, 1:3,NA))
> apply(dat, 1, function(x) { list(names(x)[ is.na(x) ]) } )[[1]]
[[1]]
[1] "x" "z"

> apply(dat, 1, function(x) { list(names(x)[ is.na(x) ]) } )
[[1]]
[[1]][[1]]
[1] "x" "z"


[[2]]
[[2]][[1]]
[1] "y"


[[3]]
[[3]][[1]]
character(0)


[[4]]
[[4]][[1]]
character(0)


[[5]]
[[5]][[1]]
[1] "z"

我想人们可能还会考虑列名上的 sapplylapply,然后可能会用 do.call 编辑 cbind()。这是我想出的:

 do.call(cbind, lapply(names(dat) , function (x) c(NA,x)[ 1+is.na(dat[[x]]) ] ))
     [,1] [,2] [,3]
[1,] "x"  NA   "z" 
[2,] NA   "y"  NA  
[3,] NA   NA   NA  
[4,] NA   NA   NA  
[5,] NA   NA   "z" 

需要将 is.na 按列应用的结果加 1 以创建索引以选择列名或 NA。

如果不能很好地了解您的数据,就很难进行评估。但是,您可以尝试 sapply() 函数。此函数可以循环遍历数据框中的变量和 return 列表对象,这在存储内容方面非常灵活。这是一个可能适合您的场景的示例:

# construct silly data.frame
temp <- data.frame("a"=1:10, "aa"=rep(1:5, 2), "b"=rnorm(10), 
"c"=sample(c("good", "bad", "ugly"), 10, replace=TRUE))
# build in some missing values
temp$a[c(1,5)] <- NA
temp$b[c(3,7, 9)] <- NA
temp$c[c(2,5)] <- NA
# take a peek at the data
temp
# construct empty list to store names of missing vars
missingVars <- list()
# loop through observations
for(i in 1:nrow(temp)) {
  # subset to one row data set
  obs.row <- temp[i,]
  # fill in missing var list with names of variables that are missing
  missingVars[[paste0("obs.",i)]] <- 
    names(obs.row)[unlist(sapply(obs.row, is.na))]
}

根据您的描述,这应该可行。然后,您可以使用行号提取缺失变量的名称:

missingVars[[1]]

或使用列表元素的名称:

missingVars[["obs.1"]]

都会为第一次观察提取缺失变量的名称。

假设数据如下:

    particpant       var1       var2
  1          1 0.74261292  0.2699047
  2          2 0.08523502 -0.2588741
  3          3         NA  1.3995776
  4          4 0.12567631  0.8855174
  5          5 0.44244614 -0.3241024

我是当前参与者以检查缺少的变量:

i <- 3

您可以通过以下方式使用 colnames 来获取 NA 列的名称。注意 colnames 的用法。参数是整个数据集,然后我们用which函数的return值索引到向量中:

colnames(data)[which(is.na(data[i,]))]

这将输出:

[1] "var1"