如何使用R中的聚合函数计算数据帧中的平均值?

如何使用R中的聚合函数计算数据帧中的平均值?,r,aggregate,R,Aggregate,我有一个数据帧df1: number=c(4,3,2,3,4,1) year=c("2000","2000","2000", "2015", "2015", "2015") items=c(12, 10, 15, 5, 10, 7) df1=data.frame(number, year, items) setDT(df1)[, Prop := number/sum(number), by = year] 这样看起来就像这样: number year items Prop 1:

我有一个数据帧df1:

number=c(4,3,2,3,4,1)
year=c("2000","2000","2000", "2015", "2015", "2015")
items=c(12, 10, 15, 5, 10, 7)
df1=data.frame(number, year, items)
setDT(df1)[, Prop := number/sum(number), by = year]
这样看起来就像这样:

  number year items      Prop
1:      4 2000    12 0.4444444
2:      3 2000    10 0.3333333
3:      2 2000    15 0.2222222
4:      3 2015     5 0.3750000
5:      4 2015    10 0.5000000
6:      1 2015     7 0.1250000
我想得到每年项目数量的平均值,所以我尝试使用以下函数:

mean.df1=aggregate((df1$number*df1$Prop),list(df1$year), mean)
但是它返回了错误的平均值。我希望它能返回:

  Group.1        x
1    2000 2.918918
2    2015 2.296296
其中,第1组为年份,x为正确的平均值


谢谢

合计
平均项目数/年

aggregate(number ~ year, data=df1, mean)
#   year   number
# 1 2000 3.000000
# 2 2015 2.666667
编辑 对于以R为基数的加权平均数,您可以使用标准分割应用联合收割机

sapply(split(df1, df1$year), function(x) weighted.mean(x$number, w=x$items))


使用
dplyr
软件包怎么样

library(dplyr)
df1  %>% group_by(year) %>% summarise(mean = sum(number * items)/sum(items))

  year     mean
1 2000 2.918919
2 2015 2.818182
我只需在聚合函数中将“mean”切换为“sum”,这样它就会变成:

mean.df1=aggregate((df1$number*df1$Prop),list(df1$year), sum)

只是
df1[,平均值(数字*Prop),by=year]
?首先为什么要在这里使用
聚合
?对于您来说,
聚合
语法是否比使用
数据的一些简单的键划更有意义。表
?您是如何得到这些结果的?2000年的平均项目数是多少?2.918918?考虑将你期望的输出与给定的数据相匹配以减少混淆。没有得到预期的输出\@ SE nORORO,期望的输出与给定的输入不匹配。你不必真的使用公式。OPs方法将给出与您的
聚合(df1$number,list(df1$year),mean)相同的结果
但“可读性”如何回答这个问题?OP提供了一个他声称不起作用的工作代码,而您提供了一个可读性更高的代码的相同解决方案。这是一个怎样的解决方案?你的解决方案没有考虑比例部分(加权平均数),这对OP似乎至关重要。因此,这将是更糟糕的解决方案可能是,您有一个
data.table
对象。为什么要使用聚合?为什么不干脆
df1[,sum(number*Prop),by=year]
mean.df1=aggregate((df1$number*df1$Prop),list(df1$year), sum)