Filtr dplyr: Uzyskaj wiersze z minimalną zmienną, ale tylko pierwsze minima wielokrotne

Chcę utworzyć zgrupowany filtr za pomocądplyr, w taki sposób, że w każdej grupie zwracany jest tylko ten wiersz, który ma minimalną wartość zmiennejx.

Mój problem to: zgodnie z oczekiwaniami, w przypadku wielokrotnych minimówwszystko zwracane są wiersze o minimalnej wartości. Ale w moim przypadkuChcę tylko pierwszego rzędu jeśli występuje wiele minimów.

Oto przykład:

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

Zgodnie z oczekiwaniami wszystkie minima są zwracane:

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

Dzięki ddply podejdę do zadania w ten sposób:

library(plyr)
ddply(df, .(A), function(z) {
    z[z$x == min(z$x), ][1, ]
})

... które działa:

  A x           y
1 A 1 -1.04584335
2 B 2  0.79600971
3 C 5 -0.08655151

P: Czy istnieje sposób na podejście do tego w dplyr? (Ze względu na szybkość)

questionAnswers(7)

yourAnswerToTheQuestion