【问题标题】:Filtering out multiple data.frame objects by given threshold simultaneously同时按给定阈值过滤掉多个data.frame对象
【发布时间】:2016-07-21 19:09:46
【问题描述】:

我有三个 data.frame 对象需要同时按给定的阈值过滤掉。我想将它们过滤掉所有 data.frame 对象的给定阈值。谁能给我一些可能的想法来完成这项任务?

模拟数据:

df1 <- data.frame(
  start=seq(1, by=9, len=18), end=seq(6, by=9, len=18),
  ID=letters[seq(1:18)], score=sample(1:25, 18, replace = FALSE))

df2 <- data.frame(
  start=seq(2, by=11, len=20), end=seq(8, by=11, len=20),
  ID=letters[seq(1:20)], score=sample(1:25, 20, replace = FALSE))

df3 <- data.frame(
  start=seq(4, by=11, len=25), end=seq(9, by=11, len=25),
  ID=letters[seq(1:25)], score=sample(1:25, 25, replace = FALSE))

我的尝试解决方法如下:

过滤掉给定的阈值:

df.li <- list(df1, df2, df3)
keep <- obj$score <= 12

test <- lapply(df.li, function(ele_) {
  keep <- ele_$score <= 12
  discard <- ele_[!keep]
  res <- data.frame(kee=keep,
                    dis=discard)
  return(res)
})

我想要的输出:

如果这种方法可以发生,我将把每个 data.frame 对象的一组过滤输出作为列表。

我认为可能有更好的方法来做到这一点。关于我提出的问题,完成这项任务的更好方法是什么?谁能指出解决此问题的可能方法?提前致谢。

【问题讨论】:

    标签: r dataframe filter


    【解决方案1】:

    你可以试试:

    lst <- list(df1, df2, df3)
    
    library(dplyr)
    lapply(lst, function(x) { filter(x, score <= 12) })
    

    或者根据@akrun 提到的,在基础R

    lapply(lst, function(x) { subset(x, score <= 12) })
    

    【讨论】:

    • 感谢您的青睐。干杯
    • @Jurat 很高兴它有帮助:)
    • 我想总结过滤后每个 data.frame 对象的保留和非保留实例集。有什么方法可以实现这个输出?非常感谢
    • @Jurat 你可以做也许lapply(lst, function(x) { split(x, x$score &lt;= 12) })
    猜你喜欢
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2021-10-09
    • 2018-04-21
    • 2023-01-30
    • 2017-11-10
    相关资源
    最近更新 更多