今天有个小伙伴问了这样一个问题:
如何计算每年每个行业内,小于该企业对应值的所有企业的均值?
这个问题可以这样解决,我准备了一个示例数据:
library(tidyverse) haven::read_dta("data.dta") -> df
df
|
假如这里我们想计算每年每个行业内,小于每个企业的工业总产值_当年价格千元值的企业均值。由于 工业总产值_当年价格千元 变量可能有相同的(这个示例数据中没有),所以我们先去除重复的:
df %>% distinct(年份, 行业门类名称, 工业总产值_当年价格千元)
|
然后我们把数据按照 年份, 行业门类名称, 工业总产值_当年价格千元 排序:
df %>% distinct(年份, 行业门类名称, 工业总产值_当年价格千元) %>% arrange(年份, 行业门类名称, 工业总产值_当年价格千元)
|
这样,工业总产值 变量就是从小到大的顺序排列了,然后计算累加:
df %>% distinct(年份, 行业门类名称, 工业总产值_当年价格千元) %>% arrange(年份, 行业门类名称, 工业总产值_当年价格千元) %>% group_by(年份, 行业门类名称) %>% mutate(sum = cumsum(工业总产值_当年价格千元))
|
因为已经按照从小到大的顺序排列了,并且去除了重复值,所以累加值减去自身就是比自己小的值的总和了:
df %>% distinct(年份, 行业门类名称, 工业总产值_当年价格千元) %>% arrange(年份, 行业门类名称, 工业总产值_当年价格千元) %>% group_by(年份, 行业门类名称) %>% mutate(sum = cumsum(工业总产值_当年价格千元) - 工业总产值_当年价格千元)
|
然后除以对应的数量就是要求的均值了:
df %>% distinct(年份, 行业门类名称, 工业总产值_当年价格千元) %>% arrange(年份, 行业门类名称, 工业总产值_当年价格千元) %>% group_by(年份, 行业门类名称) %>% mutate(sum = cumsum(工业总产值_当年价格千元) - 工业总产值_当年价格千元, n = 1:n() - 1, smallmean = sum / n) %>% select(-sum, -sum, -n) -> df1
df1
|
最后再把 df1 和 df 合并起来即可:
df %>% left_join(df1) -> dfr
dfr
|
点击这里跳转到 RStata 短书平台获取附件:R 语言:如何计算每年每个行业内,小于该企业对应值的所有企业的均值
评论