dplyr group_by和mutate,如何访问数据框?

god*_*dot 12 group-by r dplyr

当使用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))
Run Code Online (Sandbox Code Playgroud)

mean()连续应用于5个sub-dfs的列x,对应于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))
Run Code Online (Sandbox Code Playgroud)

结果是不同的.从这个结果,可以推断出"." df并不代表sub-dfs而只代表"data"一个(group_by函数不会改变任何东西).
原因是我想使用一个stat函数,它将数据帧作为每个sub-dfs的参数.谢谢 !

akr*_*run 8

我们可以在内部使用 do

data %>%
    group_by(let ) %>% 
    do(mutate(., mean.by.letter = mean(.$x)))
Run Code Online (Sandbox Code Playgroud)