Мне было любопытно, есть ли способ передать dplyr's do
функцию вектора дополнительных аргументов, которые будут применяться к каждой группе по очереди? Рассмотрим, например, если мы хотим сгруппировать набор данных mtcars
по его переменной cyl
и применить функцию head
к результирующим группам (по одному для 4, 6 и 8 соответственно) с n = 1 для 4 группы, n = 2 для группа 6 и n = 3 для 8-й группы, объединив конечные результаты в единый блок данных.Есть ли способ передать функцию dplyr `do` вектор дополнительных аргументов?
Я могу сделать это с помощью mapply
следующим образом:
temp <- mtcars %>%
split(mtcars$cyl) %>%
mapply(FUN = head, x = ., n = 1:3, SIMPLIFY = FALSE)
rbind(temp[[1]], temp[[2]], temp[[3]])
мне было интересно, если есть эквивалент способ сделать это с dplyr? Я получил, насколько ниже, но был тупик о том, как передать head
дополнительный аргумент, представляющий число строк, мы хотели бы, чтобы выбрать:
# only selects first row of each group
mtcars %>%
group_by(cyl) %>%
do(data.frame(head(x = ., n = 1)))
# throws an error because n expects a single number
mtcars %>%
group_by(cyl) %>%
do(data.frame(head(x = ., n = 1:3)))
это точно соответствует тому, что я имел в виду. Благодаря! – jeromefroe