首页 > 解决方案 > 如何检查数据框的每个元素的 NA 并单独打印它们的位置(而不是作为向量)

问题描述

我正在尝试在数据框中提供 NA 的自动报告:

#####create data frame

expl_data1 <- data.frame(var1 = c(NA, 7, 8, 9, 3), 
                         var2 = c(4, 1, NA, NA, 4), 
                         var3 = c(1, 4, 2, 9, 6), 
                         var4 = c("Hello", "I am not NA", NA, "I love R", NA)) 


#####check each element for NA
out<-apply(is.na(expl_data1), 2, which) 


####print a message with the NA's position

for (i in 1:length(out)){
  if (out[i] != "integer(0)"){
print(paste("Please remove missing values from ",names(out[i]), ", line ", out[i], sep= ""))
  }
}

打印的内容:

> [1] "Please remove missing values from var1, line 1" 

> [1] "Please remove missing values from var2, line 3:4" 

> [1] "Please remove missing values from var4, line c(3, 5)"

如果列中只有一个 NA,则输出很好。但是我对多个 NA 的输出不满意。如何单独访问和打印职位?我想要的是

> [1] "Please remove missing values from var1, line 1"
 
> [1] "Please remove missing values from var2, line 3" 

> [1] "Please remove missing values from var2, line 4" 

> [1] "Please remove missing values from var4, line 3"

> [1] "Please remove missing values from var4, line 5"

标签: r

解决方案


您可以使用arr.indfromwhich获取行和列的索引:

na_pos <- which(is.na(expl_data1), arr.ind = TRUE)
paste("Please remove missing values from row", apply(na_pos, 1, paste, collapse = ", line "))

推荐阅读