R中的汇总结果的滚动平均值

lovestacksflow

我有一个数据库,其中包含不同行业的单个公司的销售价值。在下面的示例数据集中:

set.seed(123)
df <- data.table(year=rep(1980:1984,each=4),sale=sample(100:150,20),ind=sample(LETTERS[1:2],20,replace = TRUE))
df[order(year,ind)]
    year sale ind
 1: 1980  114   A
 2: 1980  102   A
 3: 1980  130   B
 4: 1980  113   B
 5: 1981  136   A
 6: 1981  148   A
 7: 1981  141   B
 8: 1981  142   B
 9: 1982  124   A
10: 1982  125   A
11: 1982  104   A
12: 1982  126   B
13: 1983  108   A
14: 1983  128   A
15: 1983  140   B
16: 1983  127   B
17: 1984  134   A
18: 1984  107   A
19: 1984  106   A
20: 1984  146   B

“ ind”列代表行业,我省略了公司标识符(在此示例中未使用)。我想要一个定义如下的平均值:

每年的期望平均值是过去三年中该行业内所有公司的平均值。如果没有过去三年的数据,那么至少两个观察值也是可以接受的。

例如,在上面的数据集中,如果year = 1982,并且ind = A,则过去几年只有两个观测值(仍然可以接受),因此所需的平均值是1980年和1981年所有销售值的平均值行业A

如果year = 1983,而ind = A,则我们有前三年,并且期望的平均值是行业A在1980、1981和1982年的所有销售额的平均值。

如果year = 1984,并且ind = A,则我们有前三个年份,并且期望的平均值是行业A在1981、1982和1983年的所有销售额的平均值。

因此,所需的输出如下:

    year sale ind   mymean
 1: 1980  130   B       NA
 2: 1980  114   A       NA
 3: 1980  113   B       NA
 4: 1980  102   A       NA
 5: 1981  141   B       NA
 6: 1981  142   B       NA
 7: 1981  136   A       NA
 8: 1981  148   A       NA
 9: 1982  124   A 125.0000
10: 1982  125   A 125.0000
11: 1982  126   B 131.5000
12: 1982  104   A 125.0000
13: 1983  140   B 130.4000
14: 1983  127   B 130.4000
15: 1983  108   A 121.8571
16: 1983  128   A 121.8571
17: 1984  134   A 124.7143
18: 1984  107   A 124.7143
19: 1984  146   B 135.2000
20: 1984  106   A 124.7143

data.table解决方案是快速实施的首选。提前谢谢了。

阿尼尔·戈亚尔(AnilGoyal)

我不太好data.tabletidyverse如果您愿意或可以将其转换为data.table,这是一种解决方案

library(tidyverse)

df %>% group_by(ind, year) %>% 
  summarise(ds = sum(sale),
            dn = n()) %>%
  mutate(ds = (lag(ds,1)+lag(ds,2)+ifelse(is.na(lag(ds,3)), 0, lag(ds,3)))/(lag(dn,1)+lag(dn,2)+ifelse(is.na(lag(dn,3)), 0, lag(dn,3)))
  ) %>% select(ind, year, mymean = ds) %>%
  right_join(df, by = c("ind", "year"))

`summarise()` regrouping output by 'ind' (override with `.groups` argument)
# A tibble: 20 x 4
   ind    year mymean  sale
   <chr> <int>  <dbl> <int>
 1 A      1980    NA    114
 2 A      1980    NA    102
 3 A      1981    NA    136
 4 A      1981    NA    148
 5 A      1982   125    124
 6 A      1982   125    125
 7 A      1982   125    104
 8 A      1983   122.   108
 9 A      1983   122.   128
10 A      1984   125.   134
11 A      1984   125.   107
12 A      1984   125.   106
13 B      1980    NA    130
14 B      1980    NA    113
15 B      1981    NA    141
16 B      1981    NA    142
17 B      1982   132.   126
18 B      1983   130.   140
19 B      1983   130.   127
20 B      1984   135.   146

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

快速滚动平均值+总结

来自分类Dev

基于R中条件的滚动平均值

来自分类Dev

用R中的apply替换循环的滚动平均值

来自分类Dev

使用R中的条件执行滚动平均值

来自分类Dev

用R中的apply替换循环的滚动平均值

来自分类Dev

R组数据的滚动平均值

来自分类Dev

SQL中的滚动移动平均值

来自分类Dev

R语言-栏平均滚动平均值

来自分类Dev

汇总时间序列数据,获得平均值,R中不包含NA或0

来自分类Dev

Python中滚动相关数据框的滚动平均值?

来自分类Dev

汇总列表中数据框的平均值

来自分类Dev

分组滚动平均值

来自分类Dev

条件滚动平均值

来自分类Dev

sqlite滚动平均值

来自分类Dev

R中的分组移动平均值

来自分类Dev

在R中绘制“历史平均值”

来自分类Dev

R中的相同平均值

来自分类Dev

按时间段的滚动平均值,而不是R中的观察值

来自分类Dev

R不规则时间序列的滚动平均值

来自分类Dev

如何在熊猫中获得连续的滚动平均值?

来自分类Dev

SSRS汇总平均值

来自分类Dev

MongoDB汇总然后平均值

来自分类Dev

MongoDB汇总然后平均值

来自分类Dev

从函数结果中获取平均值

来自分类Dev

对所有非数字列进行分组,并打印按平均值汇总的结果数据框

来自分类Dev

R-如何计算n个先前值的平均值/平均值,但不包括当前观察值(滚动平均值)

来自分类Dev

R:向量的平均值

来自分类Dev

绘图滚动平均值和数据

来自分类Dev

python panda计算滚动平均值