R删除除NA以外的所有不带NA的列

时间:2018-07-03 10:39:33

标签: r

我有XX.61行。在数据表Df中。我想让R用NA删除所有列。
我使用了下面的代码,效果很好。

Df <-  Df[, which(unlist(lapply(Df, function(x)!all(is.na(x))))),with=F]

现在,我希望做同样的事情,但是希望保留列X.52,即使所有值都是NA。我该怎么办?

3 个答案:

答案 0 :(得分:0)

很难说,但请尝试以下操作:

 ids = apply(Df,2,function(x){print(x);return (NA %in% x);});
`Df[,-setdiff(ids,52)]

答案 1 :(得分:0)

以下代码将保留选定的列,即使其所有值均为NA

我将组成一个data.frame,而不是X.52选择列名V3。您要做的就是修改代码。

Df <- matrix(1:24, nrow = 4)
Df[, 2:4] <- NA
Df <- as.data.frame(Df)

inx1 <- which(names(Df) %in% "V3")
inx2 <- which(sapply(Df, function(x) !all(is.na(x))))
Df <- Df[, sort(c(inx1, inx2))]

Df
#  V1 V3 V5 V6
#1  1 NA 17 21
#2  2 NA 18 22
#3  3 NA 19 23
#4  4 NA 20 24

答案 2 :(得分:0)

您可以使用“&”将其添加为which函数中的另一个条件:

Df <-  Df[, which(unlist(lapply(Df, function(x)!all(is.na(x))))&colnames(Df)!="X.52"),with=F]