【发布时间】:2019-06-23 12:51:54
【问题描述】:
我正在努力计算公司年净销售额之间的百分比差异,并考虑到 NA。
以下是数据示例:
dt <- data.table(lpermno = c(10065, 10065, 10065, 10065, 59328, 61241, 59328, 61241, 59328, 61241, 59328, 61241), fyear = c(2001, 2002, 2003, 2004, 2001, 2001, 2002, 2002, 2003, 2003, 2004, 2004), sale = c(NA, NA, NA, NA, 26539, 3891.754, 26764, 2697.029, 30141, 3519.168, 34209, 5001.435))
lpermno fyear sale
10065 2001 NA
10065 2002 NA
10065 2003 NA
10065 2004 NA
59328 2001 26539.000
59328 2002 26764.000
59328 2003 30141.000
59328 2004 34209.000
61241 2001 3891.754
61241 2002 2697.029
61241 2003 3519.168
61241 2004 5001.435
我想计算一个名为 sales_change 的新变量。这个变量应该是出售的百分比变化。
[sale_n]/[sale_n-1] for each company.
对于公司的第一次观察,sales_change 需要只有 1。
我已阅读以下帖子以获得指导,但没有成功。
-
Calculate first difference by group in R
- 计算差异而不是百分比变化
-
Calculate difference between values by group and matched for time
- 调整代码后仅获取 na 作为输出
-
R: how to find percent diff between columns and naming accordingly?
- 此代码返回不同销售期间的新列,因为我已经使用了很多年,这不是可取的
- Calculate percentage change in an R data frame
- How to calculate percentage change from different rows over different spans
-
Calculate relative changes in a time series with respect to a baseline by group. NA if no baseline value was measured
- 使用基线,这不是我想要的
-
Rolling mean (moving average) by group/id with dplyr
- 看起来是计算平均值的优雅解决方案,但我正在寻找百分比变化。
对于我上面给出的示例数据,所需的输出是:
output <- data.table(lpermno = c(10065, 10065, 10065, 10065, 59328, 59328, 59328, 59328, 61241, 61241, 61241, 61241), fyear = c(2001, 2002, 2003, 2004, 2001, 2002, 2003, 2004, 2001, 2002, 2003, 2004), sale = c(NA, NA, NA, NA, 3891.754, 2697.029, 3519.168, 5001.435, 26539, 26764, 30141, 34209), output = c(NA, NA, NA, NA, 1, 0.693011, 1.304831, 1.421198, 1, 1.008478, 1.126177, 1.134966))
lpermno fyear sale output
10065 2001 NA NA
10065 2002 NA NA
10065 2003 NA NA
10065 2004 NA NA
59328 2001 3891.754 1.000000
59328 2002 2697.029 0.693011
59328 2003 3519.168 1.304831
59328 2004 5001.435 1.421198
61241 2001 26539.000 1.000000
61241 2002 26764.000 1.008478
61241 2003 30141.000 1.126177
61241 2004 34209.000 1.134966
我将不胜感激。提前致谢。
【问题讨论】: