【问题标题】:Calculate difference between rows based on two groups根据两组计算行之间的差异
【发布时间】:2019-05-02 13:32:25
【问题描述】:

我目前正在处理一个由多个变量组成的数据集,这些变量是从 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 包的解决方案,例如 summarise 和 mutate,但尽管按 GVKEY 分组,但它们似乎仍在继续计算。

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

我想添加一个列 (roa_difference) 来计算 ROA 与上一年的差异,如果没有上一年的数据来显示 NA。当前结果继续计算,不考虑公司,导致首次观察新公司时数据不正确。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    你几乎是对的,你想 group_by compagny no 吗? 此代码是否适合您需要:

    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))
    

    【讨论】:

    • 这是一个很好的答案,但我认为它可以工作,因为数据已经按 FYEAR 排序。如果数据尚未排序,则滞后功能将无法可靠地工作。最简单的解决方法是在group_bymutate 函数之间添加arrange(FYEAR) %&gt;%。这将强制数据帧的正确排序。
    猜你喜欢
    • 2022-12-09
    • 1970-01-01
    • 2020-10-25
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    相关资源
    最近更新 更多