r - 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
也就是说,如果公司i在t出现在t+1 ,则从 sum_of_year 在t+1中减去其在t+1的计数,
如果公司i没有出现在t+1中,则只需将 sum_of_year 放在t+1中,如示例所示。
我在创建这个条件代码时遇到了困难。
我怎样才能在通用版本中做到这一点?
感谢您的帮助。
解决方案
一种dplyr
在tidyr::complete
. year
我们用 0 补全和firm
和行的缺失组合。fill
count
对于每个year
,我们减去整个的count
by 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
推荐阅读
- c# - 未找到 Wpf 装饰器类
- android - 在 Android Studio 中使用动画更新标记位置
- android - In-Mobi Ad 平台始终返回 NO_FILL,即使它处于测试版本
- python - dataframe.columns 更改列表的顺序
- kubernetes - 使用 Helm 安装后 Prometheus 服务器处于挂起状态
- python - 如何将函数导入其他文件?
- visual-studio - 更新每个循环容器中的查询
- azure-powershell - 天蓝色应用程序网关警报自动化
- python - 使用 rstrip("\n") 从 readlines 中删除 \n
- r - 从 r 中的数据集创建后进先出表