r - R 中参差不齐的数据框中按年份加权平均

标签 r statistics weighted-average

我有一个包含八个变量的数据框。我想计算年度加权平均损失百分比的平均值。但是,我的数据集中并非每年都存在所有变量。最简单的方法是什么?下面包含一个示例数据集和最终所需的输出。

谢谢!

样本数据集

Fruit.Type  Year    Primary.Wgt Primary.Loss.PCT    Retail.Wgt  Retail.Loss.PCT Cons.Wgt    Cons.Loss.PCT
Oranges.F   1970    16.16   3.0 15.68   11.6    13.86   36.0
Oranges.F   1971    15.73   3.0 15.26   11.6    13.49   36.0
Oranges.F   1972    14.47   3.0 14.04   11.6    12.41   36.0
Oranges.F   1973    14.43   3.0 14.00   11.6    12.38   36.0
Tangerines.F    1971    2.34    5.0 2.22    20.4    1.80    52.0
Tangerines.F    1972    2.06    5.0 1.96    20.4    1.60    52.0
Tangerines.F    1973    2.07    5.0 1.97    20.4    1.60    52.0
Grapefruit.F    1970    8.22    3.0 7.97    12.8    6.90    20.0
Grapefruit.F    1971    8.55    3.0 8.29    12.8    7.20    20.0
Grapefruit.F    1972    8.56    3.0 8.31    12.8    7.20    20.0
Grapefruit.F    1973    8.57    3.0 8.31    12.8    7.20    20.0

所需的输出(在 Excel 中计算) 输出(加权平均损失百分比)

Year    Primary.Loss.PCT    Retail.Loss.PCT Cons.Loss.PCT
1970    3.00    11.82   11.98
1971    3.00    14.95   32.16
1972    3.16    14.66   31.78
1973    3.17    14.68   31.77

Mean    3.08    14.03   26.92
Standard Error  0.048   0.737   4.980

最佳答案

方法有很多种。我更喜欢通过data.table。 首先将您的数据转换为 data.table:

require(data.table) #tested in data.table 1.9.4
setDT(mydata)
> mydata
      Fruit.Type Year Primary.Wgt Primary.Loss.PCT Retail.Wgt Retail.Loss.PCT
 1:    Oranges.F 1970       16.16                3      15.68            11.6
 2:    Oranges.F 1971       15.73                3      15.26            11.6
 3:    Oranges.F 1972       14.47                3      14.04            11.6
 4:    Oranges.F 1973       14.43                3      14.00            11.6
 5: Tangerines.F 1971        2.34                5       2.22            20.4
 6: Tangerines.F 1972        2.06                5       1.96            20.4
 7: Tangerines.F 1973        2.07                5       1.97            20.4
 8: Grapefruit.F 1970        8.22                3       7.97            12.8
 9: Grapefruit.F 1971        8.55                3       8.29            12.8
10: Grapefruit.F 1972        8.56                3       8.31            12.8
11: Grapefruit.F 1973        8.57                3       8.31            12.8
    Cons.Wgt Cons.Loss.PCT
 1:    13.86            36
 2:    13.49            36
 3:    12.41            36
 4:    12.38            36
 5:     1.80            52
 6:     1.60            52
 7:     1.60            52
 8:     6.90            20
 9:     7.20            20
10:     7.20            20
11:     7.20            20

然后让我们进行基于组的聚合:

mydata2 <- mydata[,list(
  Primary.Loss.PCT=sum(Primary.Wgt*Primary.Loss.PCT)/sum(Primary.Wgt),
  Retail.Loss.PCT=sum(Retail.Wgt*Retail.Loss.PCT)/sum(Retail.Wgt),
  Cons.Loss.PCT=sum(Cons.Wgt*Cons.Loss.PCT)/sum(Cons.Wgt)),
       by=Year]

> mydata2
   Year Primary.Loss.PCT Retail.Loss.PCT Cons.Loss.PCT
1: 1970         3.000000        12.00440      30.68208
2: 1971         3.175808        12.74412      32.15829
3: 1972         3.164209        12.71970      31.77558
4: 1973         3.165138        12.72471      31.76959

最后,我们计算平均值和 se:

> colMeans(mydata2[,-1,with=FALSE])
Primary.Loss.PCT  Retail.Loss.PCT    Cons.Loss.PCT
        3.126289        12.548234        31.596386
> require(plotrix); std.error(mydata2[,-1,with=FALSE])
Primary.Loss.PCT  Retail.Loss.PCT    Cons.Loss.PCT
      0.04217833       0.18135513       0.31804132

我希望我已经理解你的计算逻辑。但是,最终的输出与您的不同。无论如何,您可以根据您的需要调整代码。

关于r - R 中参差不齐的数据框中按年份加权平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30240023/

相关文章:

r - 如何将这个 sapply 用例转换为 dplyr?

python - 使用泊松分布 "A"优于 "B"的可能性

android - 位置跟踪 - 带计步器和 WIFI 的西格玛点卡尔曼滤波器

python - 如何计算 scipy 中分布的 AIC?

c# - 调整从列表中选择项目的机会

r - 不断收到错误: Expecting a single value: [extent=2] in summarise

r - 在 ggplot2 中,如何将刻度标签从绘图的底部移动到顶部?

python - 随机数计算器

mysql - RDBMS 的加权投票处理

r - 如何检查文件名在R中是否可写?