Dplyr group_by и mutate, как доступ к кадру данных

При использовании dplyr "group_by" и "mutate", если я правильно понимаю, кадр данных разбивается на разные суб-данные в соответствии с аргументом group_by. Например, со следующим кодом:

 set.seed(7)
 df <- data.frame(x=runif(10),let=rep(letters[1:5],each=2))
 df %>% group_by(let) %>% mutate(mean.by.letter = mean(x))

mean() применяется последовательно к столбцу x из 5 под-dfs, соответствующему букве между a и e.

Итак, вы можете манипулировать столбцами sub-dfs, но можете ли вы получить доступ к самим sub-dfs? К моему удивлению, если я попробую:

 set.seed(7)
 data <- data.frame(x=runif(10),let=rep(letters[1:5],each=2))
 data %>% group_by(let) %>% mutate(mean.by.letter = mean(.$x))

результат отличается. Из этого результата можно сделать вывод, что "." df не представляет последовательно суб-dfs, а только "данные" (функция group_by ничего не меняет).
Причина в том, что я хочу использовать функцию stat, которая принимает фрейм данных как аргументы для каждого из этих под-dfs. Спасибо!

Ответ 1

Мы можем использовать в do

data %>%
    group_by(let ) %>% 
    do(mutate(., mean.by.letter = mean(.$x)))