我有一个包含576列的数据框,其中许多列包含-999.999。我实际上想从我的数据框中删除所有这些列,换句话说,我只想处理不包含-999.999的列。所以我使用了一个给我TRUE / FALSE的循环,虽然它的目的是让所有-999.999变成'NA':
achem<-lapply(1:length(achem), function(i) is.na(achem[[i]])<- achem[[i]]==-999.999)
> head(achem)
[[1]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[19] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[37] FALSE FALSE FALSE FALSE FALSE FALSE
... ...
[[4]]
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[22] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[[5]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[19] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[37] FALSE FALSE FALSE FALSE FALSE FALSE
... ...
下一步是找到TRUE的列表[[i]],这样我就可以用这些列创建一个新的数据帧,所以我尝试了这个
lapply(1:length(achem), function(i) which(achem[[i]], isTRUE))
但抛出错误
Error in arr.ind && !is.null(d <- dim(x)) : invalid 'x' type in 'x && y'
我试过
lapply(1:length(achem), function(i) which(as.logical(achem[[i]])))
但这并没有给我所需的[[i]]。任何简单的解决方案或使用Filter函数?
答案 0 :(得分:1)
这似乎过于复杂。
如果achem
真的是data.frame
(请再现一个例子!),那么你可以这样做:
discardCols <- apply( achem, 2, function(x) any(x==-999.99) )
achem <- achem[ , !discardCols ]
答案 1 :(得分:1)
一种简单的方法是(假设所有列都是数字):
achem[!colSums(achem == -999.999)]
这将排除至少有一个值等于-999.999
的所有列。