dplyr - из group_by в собственную функцию
Вполне возможно, что это дубликат одного или обоих из них, если так, то извиняюсь, и я думаю, что это сделало бы выдающуюся острую проблему.
передать сгруппированные данные в собственную функцию в dplyr
Используя plyr, можно запустить что-то вроде этого:
ddply(mtcars, .(cyl), function(x) table(x$am))
и получить хороший вывод
> ddply(mtcars, .(cyl), function(x) table(x$am))
cyl 0 1
1 4 3 8
2 6 4 3
3 8 12 2
Я до сих пор не понимаю, почему ddply(mtcars, .(cyl), table(am))
не работает, но не важно
Есть ли способ достичь вышеупомянутого в dplyr?
mtcars %>%
group_by(cyl) %>%
function(x) table(x$am)
Не достигает тех же результатов.
ОБНОВЛЕННЫЙ ВОПРОС (оставив вышесказанное в исторических целях).
В ретроспективе, хотя вышесказанное я хотел бы делать время от времени, я больше пытался получить такую функциональность:
blah <- function(x) {
x$position <- 1:nrow(x)
x$count <- nrow(x)
return(x)
}
ddply(mtcars, .(cyl,am), function(x) blah(x))
1 ответ
Превращение моих комментариев и комментариев Docendo в ответ, вот что do()
для.
mtcars %>% group_by(cyl, am) %>% do(blah(.))
# same results as
plyr::ddply(mtcars, plyr::.(cyl, am), function(x) blah(x))
# same as plyr with no anonymous function in this case
plyr::ddply(mtcars, plyr::.(cyl, am), blah)
Так как blah
Если взять полный фрейм данных (по крайней мере, с точки зрения столбцов) и вернуть фрейм данных, вам не нужен анонимный вызов функции.
Много похоже между dplyr
а также ddply
, если вы хотите добавить столбцы, вы используете mutate
, если вы хотите свернуть группирующие переменные с агрегатными функциями, вы используете summarise
, do
является dplyr-эквивалентом выполнения чего-то другого для каждого фрагмента данных, но он должен возвращать фрейм данных.