r条件减数

问题描述 投票:0回答:1

我正在尝试执行以下逻辑来创建“减”列。我有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,如示例中所示。

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

如何在通用版本中做到这一点?

谢谢您的帮助。

r conditional-statements subtraction
1个回答
0
投票

dplyr的帮助下使用tidyr::complete的一种方法。我们用0填写yearfirmfill count的行的缺失组合。对于每个year,我们将整个countsumcount减去year ],最后对于每个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
© www.soinside.com 2019 - 2024. All rights reserved.