dplyr - из group_by в собственную функцию

Вполне возможно, что это дубликат одного или обоих из них, если так, то извиняюсь, и я думаю, что это сделало бы выдающуюся острую проблему.

https://stackru.com/questions/28388211/in-r-package-dplyr-how-to-use-own-defined-function-to-summarise-each

передать сгруппированные данные в собственную функцию в 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-эквивалентом выполнения чего-то другого для каждого фрагмента данных, но он должен возвращать фрейм данных.

Другие вопросы по тегам