我有dplyr的som问题,group_by函数没有按预期工作.使用汇总,我希望得到输入到group_by语句中的id和year的每个唯一组合的var1的均值.
此代码应创建一个带有id年观察的df,其中我想为每个id和year组合聚合var 1的均值.但是,这不能按预期工作,输出会忽略id,而只会在年份聚合.
df <- data.frame(id=c(1,1,2,2,2,3,3,4,4,5),
year=c(2013,2013,2012,2013,2013,2013,2012,2012,2013,2013),
var1=rnorm(10))
Run Code Online (Sandbox Code Playgroud)
dplyr代码:
dfagg <- df %.%
group_by(id, year) %.%
select(id, year, var1) %.%
summarise(
var1=mean(var1)
)
Run Code Online (Sandbox Code Playgroud)
结果:
> dfagg
Source: local data frame [8 x 2]
Groups: year
year var1
1 2013 0.22924025
2 2012 -0.93073687
3 2013 -0.82351583
4 2012 0.05656113
5 2013 -0.21622021
6 2012 1.91158209
7 2013 -2.67003628
8 2013 -0.72662276
Run Code Online (Sandbox Code Playgroud)
知道发生了什么事吗?
为了确保没有其他包中断dplyr函数,我尝试了以下相同的结果.
dfagg <- df %.%
dplyr::group_by(id, year) %.%
dplyr::select(id, year, var1) %.%
dplyr::summarise(
var1=mean(var1)
)
Run Code Online (Sandbox Code Playgroud)
我认为你不需要这select()
条线。只需使用group_by()
and 就summarise()
可以帮我解决问题。
library(dplyr)
df <- data.frame(id=c(1,1,2,2,2,3,3,4,4,5),
year=c(2013,2013,2012,2013,2013,2013,2012,2012,2013,2013),
var1=rnorm(10))
df %>%
group_by(id, year) %>%
summarise(mean_var1=mean(var1)) -> dfagg
Run Code Online (Sandbox Code Playgroud)
结果:
id year mean_var1
(dbl) (dbl) (dbl)
1 1 2013 -1.20744511
2 2 2012 -0.59159641
3 2 2013 -0.03660552
4 3 2012 -0.38853566
5 3 2013 -1.76459495
6 4 2012 -0.66926387
7 4 2013 0.70451751
8 5 2013 -0.82762769
Run Code Online (Sandbox Code Playgroud)