r 条件减数

r conditional subtract number

我正在尝试执行以下逻辑来创建 'subtract' 列。 我有 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

也就是说,如果t的公司i出现在t+1,然后从 t+1

的 sum_of_year 减去 t+1 的计数

如果公司i没有出现在t+1,那么就把sum_of_year放在 ]t+1 如示例所示。

我在创建此条件代码时遇到困难。

如何在通用版本中执行此操作?

感谢您的帮助。

tidyr::complete 的帮助下使用 dplyr 的一种方法。我们用 0 完成 yearfirm 以及 fill count 的缺失行组合。对于每个 year,我们减去 count整个 yearcount 中的 sum,最后是每个 firm,我们使用 lead.

获取下一年的值
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