我想使用 dplyr
制作一个分组过滤器,在每个分组中只有那一行返回,它的最小值是变量 x
。
我的问题是: 正如预期的那样,在多个最小 所有行的情况下,返回最小值。但在我的情况下,如果存在多个极小值,则 我只要第一排。
这里有一个例子:
df <- data.frame(
A=c("A", "A", "A", "B", "B", "B", "C", "C", "C"),
x=c(1, 1, 2, 2, 3, 4, 5, 5, 5),
y=rnorm(9)
)
library(dplyr)
df.g <- group_by(df, A)
filter(df.g, x == min(x))
正如预期的那样,返回所有最小值:
Source: local data frame [6 x 3]
Groups: A
A x y
1 A 1 -1.04584335
2 A 1 0.97949399
3 B 2 0.79600971
4 C 5 -0.08655151
5 C 5 0.16649962
6 C 5 -0.05948012
如果是 ddply,我会这样处理这项任务:
library(plyr)
ddply(df, .(A), function(z) {
z[z$x == min(z$x), ][1, ]
})
这个方法很有效:
A x y
1 A 1 -1.04584335
2 B 2 0.79600971
3 C 5 -0.08655151
问: 有没有办法在 dplyr 中解决这个问题? (出于速度的原因)