Voglio trovare l'elemento lead() e lag() in ogni gruppo, ma ho avuto risultati errati.dplyr: lead() e lag() errati se usati con group_by()
Ad esempio, i dati è come questo:
library(dplyr)
df = data.frame(name=rep(c('Al','Jen'),3),
score=rep(c(100, 80, 60),2))
df
dati:
name score
1 Al 100
2 Jen 80
3 Al 60
4 Jen 100
5 Al 80
6 Jen 60
Ora cerco di scoprire piombo() e lag() realizza per ogni persona. Se io a ordinare utilizzando organizzare(), posso ottenere la risposta corretta:
df %>%
arrange(name) %>%
group_by(name) %>%
mutate(next.score = lead(score),
before.score = lag(score))
OUTPUT1:
Source: local data frame [6 x 4]
Groups: name
name score next.score before.score
1 Al 100 60 NA
2 Al 60 80 100
3 Al 80 NA 60
4 Jen 80 100 NA
5 Jen 100 60 80
6 Jen 60 NA 100
Senza organizzare(), il risultato è sbagliato:
df %>%
group_by(name) %>%
mutate(next.score = lead(score),
before.score = lag(score))
OUTPUT2:
Source: local data frame [6 x 4]
Groups: name
name score next.score before.score
1 Al 100 80 NA
2 Jen 80 60 NA
3 Al 60 100 80
4 Jen 100 80 60
5 Al 80 NA 100
6 Jen 60 NA 80
Ad esempio, in prima linea, il prossimo album di Al dovrebbe essere 60 (terza linea).
Qualcuno sa perché questo è successo? Perché arrangement() influisce sul risultato (i valori, non solo sull'ordine)? Grazie ~
@DavidArenburg non è l'ordinamento, l'OP chiede perché il risultato è 80 quando nel frame di dati originale il risultato successivo è 60. È come se il risultato di Jen fosse selezionato al posto di Al's –
E non riesco a ripeterlo. Quale versione di R stai usando? Ottengo '1 Al 100 60 NA' con R 3.1.2 su Windows 7 –
@PanagiotisKanavos, sì hai ragione. Non me ne sono accorto. –