2015-07-20 15 views
8

Mam następujący kod:Znalezienie indeksu cummax wewnątrz mutanta dplyr?

library(dplyr) 
set.seed(10) 
test<-data.frame(x=runif(10,0,1),y=rep(c(1,2),5)) 
test <- test %>% 
    group_by(y) %>% 
    mutate(max_then=cummax(x)) 

test 

który wyprowadza

Source: local data frame [10 x 3] 
Groups: y 

      x y max_then 
1 0.50747820 1 0.5074782 
2 0.30676851 2 0.3067685 
3 0.42690767 1 0.5074782 
4 0.69310208 2 0.6931021 
5 0.08513597 1 0.5074782 
6 0.22543662 2 0.6931021 
7 0.27453052 1 0.5074782 
8 0.27230507 2 0.6931021 
9 0.61582931 1 0.6158293 
10 0.42967153 2 0.6931021 

Chcę dodać kolejny zmutowany kolumnę, która dodać RowNumber/indeks z którego max_then została obliczona. Wyobrażam sobie, że będzie to coś takiego. ale naprawdę nie mogę tego zrobić.

test %>% 
group_by(y) %>% 
    mutate(max_then-cummax(x), 
      max_index=which(.$x==max_then)) 

Oczekiwany wynik jest:

  x y max_then max_index 
1 0.50747820 1 0.5074782   1 
2 0.30676851 2 0.3067685   2 
3 0.42690767 1 0.5074782   1 
4 0.69310208 2 0.6931021   4 
5 0.08513597 1 0.5074782   1 
6 0.22543662 2 0.6931021   4 
7 0.27453052 1 0.5074782   1 
8 0.27230507 2 0.6931021   4 
9 0.61582931 1 0.6158293   9 
10 0.42967153 2 0.6931021   4 

Wszelkie sugestie? Jestem tylko ciekawy, czy można to zrobić w ramach instrukcji mutate(). Mogę to zrobić poza instrukcją mutate().

+2

Proszę używać 'set.seed'. Można również prawdopodobnie zmniejszyć to do 10 wierszy. Na koniec proszę podać pożądany wynik. –

Odpowiedz

10

ja po prostu dopasować unikalne instancje w x

test %>% 
    mutate(max_index = match(max_then, unique(test$x))) 
# Source: local data frame [10 x 4] 
# Groups: y 
# 
#    x y max_then max_index 
# 1 0.50747820 1 0.5074782   1 
# 2 0.30676851 2 0.3067685   2 
# 3 0.42690767 1 0.5074782   1 
# 4 0.69310208 2 0.6931021   4 
# 5 0.08513597 1 0.5074782   1 
# 6 0.22543662 2 0.6931021   4 
# 7 0.27453052 1 0.5074782   1 
# 8 0.27230507 2 0.6931021   4 
# 9 0.61582931 1 0.6158293   9 
# 10 0.42967153 2 0.6931021   4 
+1

mecz był tym, czego szukałem dzięki – Jimbo

+1

Nie powinieneś potrzebować 'testu $'? – hadley

+0

@Hadley nie działa poprawnie. Wygląda na to, że musisz go połączyć z 'ungroup()' lub czymś, aby to zadziałało. –

Powiązane problemy