如何过滤具有多个条件的数据框?
How to filter dataframe with multiple conditions?
我有这个数据框,我想对其进行子集化(如果可能,使用 dplyr
或 base 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 conditions/levels),我怎样才能 subset/filter 这个数据框,以便我只得到 df$y
大于 15 的值 df$x == 1
,以及 df$x == 2
大于 5 的 df$y
值?
这是我想要得到的:
df2 <- data.frame(x = c(1,2,2), y = c(30,10,18))
x y
1 30
2 10
2 18
感谢任何帮助!谢谢!
你可以试试这个
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))
如果您有多个 'x' 组,一种选择是使用 mapply
。我们 split
'y' 使用 'x' 作为分组变量,创建要比较的值向量 (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
我有这个数据框,我想对其进行子集化(如果可能,使用 dplyr
或 base 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 conditions/levels),我怎样才能 subset/filter 这个数据框,以便我只得到 df$y
大于 15 的值 df$x == 1
,以及 df$x == 2
大于 5 的 df$y
值?
这是我想要得到的:
df2 <- data.frame(x = c(1,2,2), y = c(30,10,18))
x y
1 30
2 10
2 18
感谢任何帮助!谢谢!
你可以试试这个
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))
如果您有多个 'x' 组,一种选择是使用 mapply
。我们 split
'y' 使用 'x' 作为分组变量,创建要比较的值向量 (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