usar sheet mutate meaning functions como cheat r dplyr

mutate - r dplyr cheat sheet



dplyr: lead() y lag() incorrecto cuando se usa con group_by() (2)

Parece que tienes que pasar argumentos adicionales para retrasar y liderar funciones. Cuando ejecuto tu función sin organizar, pero con order_by agregado, todo parece estar bien.

df %>% group_by(name) %>% mutate(next.score = lead(score, order_by=name), before.score = lag(score, order_by=name))

Salida:

name score next.score before.score 1 Al 100 60 NA 2 Jen 80 100 NA 3 Al 60 80 100 4 Jen 100 60 80 5 Al 80 NA 60 6 Jen 60 NA 100

Mi sessionInfo ():

R version 3.1.1 (2014-07-10) Platform: x86_64-w64-mingw32/x64 (64-bit) locale: [1] LC_COLLATE=Polish_Poland.1250 LC_CTYPE=Polish_Poland.1250 LC_MONETARY=Polish_Poland.1250 [4] LC_NUMERIC=C LC_TIME=Polish_Poland.1250 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] dplyr_0.4.1 loaded via a namespace (and not attached): [1] assertthat_0.1 DBI_0.3.1 lazyeval_0.1.10 magrittr_1.5 parallel_3.1.1 Rcpp_0.11.5 [7] tools_3.1.1

Quiero encontrar el elemento lead () y lag () en cada grupo, pero tuve algunos resultados erróneos.

Por ejemplo, los datos son así:

library(dplyr) df = data.frame(name=rep(c(''Al'',''Jen''),3), score=rep(c(100, 80, 60),2)) df

Datos:

name score 1 Al 100 2 Jen 80 3 Al 60 4 Jen 100 5 Al 80 6 Jen 60

Ahora trato de averiguar las puntuaciones de plomo () y lag () de cada persona. Si lo ordeno usando Arreglo (), puedo obtener la respuesta correcta:

df %>% arrange(name) %>% group_by(name) %>% mutate(next.score = lead(score), before.score = lag(score) )

SALIDA1:

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

Sin organizar (), el resultado es incorrecto:

df %>% group_by(name) %>% mutate(next.score = lead(score), before.score = lag(score) )

SALIDA2:

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

Por ejemplo, en la 1ª línea, el siguiente puntaje de Al debería ser 60 (3ª línea).

¿Alguien sabe por qué sucedió esto? ¿Por qué organizar () afecta el resultado (los valores, no solo el orden)? Gracias ~


Usar order_by es bueno cuando solo tienes una variable de agrupación. En el caso de una variable de agrupación múltiple, no pude encontrar ninguna solución excepto escribir y leer la tabla para deshacerme de las variables de agrupación. Funcionó bastante bien para mí, pero su eficiencia depende del tamaño de la tabla.