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 完成 year
和 firm
以及 fill
count
的缺失行组合。对于每个 year
,我们减去 count
整个 year
的 count
中的 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
我正在尝试执行以下逻辑来创建 '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 完成 year
和 firm
以及 fill
count
的缺失行组合。对于每个 year
,我们减去 count
整个 year
的 count
中的 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