Próbuję zwinąć ramkę danych, usuwając wszystkie wiersze z wyjątkiem jednego z każdej grupy wierszy z identycznymi wartościami w określonej kolumnie. Innymi słowy, pierwszy wiersz z każdej grupy.Zwijanie ramki danych przez wybranie jednego wiersza na grupę
Na przykład chciałbym skonwertować ten
> d = data.frame(x=c(1,1,2,4),y=c(10,11,12,13),z=c(20,19,18,17))
> d
x y z
1 1 10 20
2 1 11 19
3 2 12 18
4 4 13 17
Do tego:
x y z
1 1 11 19
2 2 12 18
3 4 13 17
Używam kruszywo to zrobić obecnie, ale wydajność jest nie do przyjęcia z większą ilością danych:
> d.ordered = d[order(-d$y),]
> aggregate(d.ordered,by=list(key=d.ordered$x),FUN=function(x){x[1]})
próbowałem split/niedwojonych z tym samym argumentem funkcji jak tutaj, ale niedwojonych narzeka abo ut duplikat numerów wierszy.
Czy istnieje możliwość? Czy istnieje idiom R do zamiany wektora długości rle na indeksy wierszy, które rozpoczynają każdy przebieg, które następnie mogę wykorzystać do zerwania tych wierszy z ramki danych?
wolałbym wszystkie kolumny, thanks – jkebinger
Więc trzeba po prostu dodać „etap przetwarzania”, aby utworzyć zmienną czynnik, nad którym plyr możliwe, pętla. Można to zrobić za pomocą poleceń indeksujących, spróbuj. A tak przy okazji, jesteś niespójny między tekstem (mówiąc pierwszy wybrany wiersz) i przykładem (pokazując drugi wiersz). –
Nawiasem mówiąc, cross-posting między r-help i tutaj jest również nieco kiepski styl. Masz dobre odpowiedzi w r-help, więc dlaczego ich nie studiujesz? –