同时按给定阈值过滤掉多个data.frame对象

时间:2016-07-21 19:09:46

标签: r dataframe filter

我有三个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对象的过滤输出组作为列表。

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

1 个答案:

答案 0 :(得分:2)

你可以尝试:

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) })