【发布时间】:2014-01-11 18:49:25
【问题描述】:
我有一个包含 576 列的数据框,其中许多列包含 -999.999。我实际上想从我的数据框中删除所有这些列,换句话说,我只想处理不包含-999.999 的列。所以我使用了一个循环,虽然它旨在使所有 -999.999 都变为“NA”,但它给了我 TRUE/FALSE:
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]]。任何简单的解决方案或过滤功能的使用?
【问题讨论】:
-
请使用 dput(sample_data) 为任何查看此内容的人提供一个易于重现的示例