r условное число вычитания - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь сделать следующую логику, чтобы создать столбец «вычитать». У меня есть годы с 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

То есть, если фирма i при t появляется в t + 1, затем вычтите его счет в t + 1 из суммы sum_of_year в t + 1 ,

, если фирма i не делаетпоявляются в t + 1 , затем просто введите sum_of_year в t + 1 , как показано в примере.

У меня возникли трудности при создании этого условного кода.

Как я могу сделать это в обобщенной версии?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 03 октября 2019

В одну сторону, используя dplyr с помощью tidyr::complete. Мы заполняем недостающие комбинации строк для year и firm и fill count с 0. Для каждого year мы вычитаем count на sum из count для всего этого 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
...