【问题标题】:Filtering a dataframe with columns containing undesired values in R过滤包含 R 中不需要的值的列的数据框
【发布时间】: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) 为任何查看此内容的人提供一个易于重现的示例

标签: r filter indexing


【解决方案1】:

一种简单的方法是(假设所有列都是数字):

achem[!colSums(achem == -999.999)]

这将排除至少一个值等于-999.999 的所有列。

【讨论】:

    【解决方案2】:

    这似乎过于复杂了。

    如果achem 真的是data.frame(请提供可重现的示例!),那么您可以这样做:

    discardCols <- apply( achem, 2, function(x) any(x==-999.99) )
    achem <- achem[ , !discardCols ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 2018-12-20
      • 2020-01-18
      • 2016-12-05
      • 2021-04-18
      • 2017-08-15
      • 2022-01-04
      相关资源
      最近更新 更多