首页 > 解决方案 > r 条件减数

问题描述

我正在尝试执行以下逻辑来创建“减去”列。我从 1986 年到 2014 年有几年和大约 100 家公司。

year  firm   count sum_of_year  subtract
1986   A       1       2           2
1986   B       1       2           4
1987   A       2       4           5
1987   C       1       4           2
1987   D       1       4           5
1988   C       3       5
1988   E       2       5

也就是说,如果公司it出现在t+1 ,则从 sum_of_year 在t+1中减去其在t+1的计数,

如果公司i没有出现在t+1中,则只需将 sum_of_year 放在t+1中,如示例所示。

我在创建这个条件代码时遇到了困难。

我怎样才能在通用版本中做到这一点?

感谢您的帮助。

标签: rconditional-statementssubtraction

解决方案


一种dplyrtidyr::complete. year我们用 0 补全和firm和行的缺失组合。fill count对于每个year,我们减去整个的countby sum,最后对于每个,我们使用 取下一年的值。countyearfirmlead

library(dplyr)

df %>%
  tidyr::complete(year, firm, fill = list(count = 0)) %>%
  group_by(year) %>%
  mutate(n = sum(count) - count) %>%
  group_by(firm) %>%
  mutate(subtract = lead(n)) %>%
  filter(count != 0) %>%
  select(-n)


#   year firm  count sum_of_year subtract
#  <int> <fct> <dbl>       <int>    <dbl>
#1  1986 A         1           2        2
#2  1986 B         1           2        4
#3  1987 A         2           4        5
#4  1987 C         1           4        2
#5  1987 D         1           4        5
#6  1988 C         3           5       NA
#7  1988 E         2           5       NA

推荐阅读