如何使用多个条件过滤数据框?

时间:2015-05-04 18:22:56

标签: r dataframe subset dplyr

我有这个数据框,我想要分组(如果可能,使用dplyrbase R函数):

df <- data.frame(x = c(1,1,1,2,2,2), y = c(30,10,8,10,18,5))

x  y
1 30
1 10
1  8
2 10
2 18
2  5

假设x是因子(因此有2个条件/级别),我如何对此数据帧进行子集/过滤,以便df$y只获得大于15的df$x == 1个值,并{{1 df$y的值大于5?

这就是我想要的:

df$x == 2

感谢任何帮助!谢谢!

2 个答案:

答案 0 :(得分:2)

如果你有几个'x'组,一个选项是使用mapply。我们使用'x'作为分组变量split'y',创建要与(c(15,5))进行比较的值向量,并使用mapply获取用于对'df进行子集化的逻辑索引”。

df[unlist(mapply('>', split(df$y, df$x), c(15,5))),]
#  x  y
#1 1 30
#4 2 10
#5 2 18

答案 1 :(得分:1)

你可以试试这个

with(df, df[ (x==1 & y>15) | (x==2 & y>5), ])
  x  y
1 1 30
4 2 10
5 2 18

dplyr

library(dplyr)
filter(df, (x==1 & y>15) | (x==2 & y>5))