group_by - select group by r
dplyr: ¿Cómo aplicar do() en el resultado de group_by? (1)
Me gustaría usar dplyr para agrupar una tabla por una columna, luego aplicar una función al conjunto de valores en la segunda columna de cada grupo.
Por ejemplo, en el ejemplo de código a continuación, me gustaría devolver todas las combinaciones de alimentos que cada persona come con 2 elementos. No puedo averiguar cómo suministrar correctamente la función con la columna (alimentos) adecuada en la función do()
.
library(dplyr)
person = c( ''Grace'', ''Grace'', ''Grace'', ''Rob'', ''Rob'', ''Rob'' )
foods = c( ''apple'', ''banana'', ''cucumber'', ''spaghetti'', ''cucumber'', ''banana'' )
eaten = data.frame(person, foods)
by_person = group_by(eaten, person)
# How to do this?
do( by_person, combn( x = foods, m = 2 ) )
Tenga en cuenta que el código de ejemplo en ?do
falla en mi máquina
mods <- do(carriers, failwith(NULL, lm), formula = ArrDelay ~ date)
Vamos a definir eaten
así:
eaten <- data.frame(person, foods, stringsAsFactors = FALSE)
1) Entonces intente esto:
eaten %.% group_by(person) %.% do(function(x) combn(x$foods, m = 2))
dando:
[[1]]
[,1] [,2] [,3]
[1,] "apple" "apple" "banana"
[2,] "banana" "cucumber" "cucumber"
[[2]]
[,1] [,2] [,3]
[1,] "spaghetti" "spaghetti" "cucumber"
[2,] "cucumber" "banana" "banana"
2) Para poder hacer algo parecido a lo que @Hadley describe en los comentarios sin esperar una versión futura de dplyr, intente esto donde se encuentra do2
here :
library(gsubfn)
eaten %.% group_by(person) %.% fn$do2(~ combn(.$foods, m = 2))
dando:
$Grace
[,1] [,2] [,3]
[1,] "apple" "apple" "banana"
[2,] "banana" "cucumber" "cucumber"
$Rob
[,1] [,2] [,3]
[1,] "spaghetti" "spaghetti" "cucumber"
[2,] "cucumber" "banana" "banana"
Nota: La última línea de la pregunta que da el código en el archivo de ayuda también falla para mí. Esta variación funciona para mí: do(jan, lm, formula = ArrDelay ~ date)
.