我有一个数据框,我想要用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个条件/水平),我该如何对数据框进行子集/筛选,以便仅获取
df$x == 1
时大于15的df$y
值,以及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
感谢您的帮助!谢谢!
dplyr
解决方案,因为它更容易理解,但是您的mapply
解决方案也相当不错,但我不完全明白mapply
在这里的作用。 您能解释一下mapply('>', split(df$y, df$x), c(15,5))
的含义吗?非常感谢! - hsldplyr
和其他解决方案在这里都很好。但是,我要处理大量的组,比如说你有100个唯一值,并且有100个值要与每个“x”的y
元素进行比较,那么mapply
将使用>
将相应的列表元素(split
的输出)与相应的向量元素(c(15,5)
)进行比较。 - akrundata.frame(x = c(1,1,1,2,2,2,2), y = c(30,10,8,10,18,5,9))
(三个1和四个2),这种方法似乎无法工作。这是因为为了使其正常工作,mapply
必须返回一个数据框,而不是列表吗?@akrun - hslunlist
。我认为它适用于大多数情况。df [unlist(mapply('>',split(df $ y,df $ x),c(15,5))),]
在提供的示例中,长度相等,因此mapply
将结果强制转换为matrix
,而在此处,则保留为list
。因此,最好使用unlist
。 - akrun