根据两组计算行之间的差异

时间:2019-05-02 13:32:25

标签: r dplyr

我目前正在处理一个包含从WRDS提取的几个变量的数据集。数据包含有关公司(GVKEY),资产回报率(ROA)和会计年度(FYEAR)的信息。我想计算每个公司的每个的ROA变化。该数据框由大约4000家公司组成,并有一些公司年的观察结果。数据框(df_industry)如下所示:

GVKEY FYEAR ROA
100   2001  0.34
100   2002  0.33
100   2003  0.66
100   2004  0.49
100   2005  0.20
202   2001  0.34
202   2004  0.99
202   2005  0.12
202   2006  0.78
202   2007  0.23
202   2008  0.89

我已经使用dplyr软件包尝试了几种解决方案,例如汇总和变异,但是尽管已按GVKEY分组,但它们似乎仍继续进行计算。

df_industry %>% group_by(FYEAR) %>% mutate(roa_difference = ROA - lag(ROA))

我想添加一列(roa_difference),以计算与上一年的ROA差异,如果没有上一年的数据来显示NA。无论公司如何,当前结果都将继续计算,从而导致初次观察新公司的数据不正确。

1 个答案:

答案 0 :(得分:1)

您几乎是正确的,您要group_by compagny否? 这段代码是否适合您的需求:

df <- data.frame(GVKEY = rep(100, 4), FYEAR = seq(2001, 2004, 1), ROA = c(0.34, 0.33, 0.66, 0.49))

df %>%
  arrange(FYEAR) %>%
  group_by(GVKEY) %>%
  mutate(roa_difference = ROA - lag(ROA))