【发布时间】:2016-08-01 19:01:59
【问题描述】:
在使用 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() 依次应用于与 a & e 之间的一个字母相对应的 5 个 sub-dfs 的 x 列。
所以您可以操作子 dfs 的列,但您可以自己访问子 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 函数,该函数将数据框作为每个 sub-dfs 的参数。
谢谢!
【问题讨论】:
-
你可以试试
?do -
do.call(rbind, lapply(split(df, df$let), myfun)) -
我不明白这个问题,因为接受的答案与
data %>% group_by(let) %>% mutate(mean.by.letter = mean(x))产生的结果相同(除非我遗漏了什么)但可能会因为额外的do-call 而变慢跨度> -
@docendo-discimus :对不起,如果不清楚,但我不想让它太长,所以我使用了一个过于简化的例子。而且,你是对的,在这个简单的情况下,我可以有更简单的解决方案(即你重复的那个)。但是正如我在问题的最后试图解释的那样,一旦您需要将整个子数据帧作为 stat 函数的参数(而不是像 x平均()...)