【发布时间】:2022-11-21 17:44:02
【问题描述】:
我有一个 6 列的 df。我想根据日期找到增量,并按前几列分组。
df <- data.frame (col1 = c('A1','A1','A1','A2','A2','A2','A1','A1','A1','A2','A2','A2','A2','A2','A2'),
col2 = c('B1','B2','B3','B1','B2','B3','B1','B2','B3','B1','B2','B3','B1','B2','B3'),
col3 = c('C1','C2','C3','C1','C2','C3','C1','C2','C3','C1','C2','C3','C1','C2','C3'),
col4 = c('D1','D2','D22','D4','D5','D6','D1','D2','D3','D4','D5','D6','D7','D8','D9'),
col5 = c('1/01/2021','1/01/2021','1/01/2021','1/01/2021','1/01/2021','1/01/2021',
'1/01/2022','1/01/2022','1/01/2022','1/01/2022','1/01/2022','1/01/2022',
'1/01/2022','1/01/2022','1/01/2022'),
col6 = c(10,20,30,40,50,60,100, 200, 300,400,500,600,60,60, 60)
)
diff_na<-df%>%
group_by(col1,col2,col3,col4) %>%
mutate(diff = col6 - lag(col6, default = first(col6,default = 0), order_by = col5))
预期输出是:
df11 <- data.frame (col1 = c('A1','A1','A1','A2','A2','A2','A1','A1','A1','A2','A2','A2','A2','A2','A2'),
col2 = c('B1','B2','B3','B1','B2','B3','B1','B2','B3','B1','B2','B3','B1','B2','B3'),
col3 = c('C1','C2','C3','C1','C2','C3','C1','C2','C3','C1','C2','C3','C1','C2','C3'),
col4 = c('D1','D2','D22','D4','D5','D6','D1','D2','D3','D4','D5','D6','D7','D8','D9'),
col5 = c('1/01/2021','1/01/2021','1/01/2021','1/01/2021','1/01/2021','1/01/2021',
'1/01/2022','1/01/2022','1/01/2022','1/01/2022','1/01/2022','1/01/2022',
'1/01/2022','1/01/2022','1/01/2022'),
col6 = c(10,20,30,40,50,60,100, 200, 300,400,500,600,60,60, 60),
dfiff =c(0,0,30,0,0,0,90,180,300,360,450,540,60,60,60)
)
如果前面的 col4 中的值不存在,我将面临一个问题,那么它不会减去该值。我的意思是它应该将缺失值视为 0。我尝试将第一个默认值设置为 0。但不知何故,最后三个差异值是 0 而不是 60。 请指导我哪里出错了。
第 3 行在 Col4 中的值为 D22,它在日期 01/01/2022 中不存在,因此应该存在 30。类似的第 13、14、15 行没有日期 01/01/2021 的对应值。所以 diff col 应该有 60 。
感谢和问候, R
【问题讨论】:
-
您的预期输出是什么?
-
最后一个值应该是 60,我的意思是如果没有匹配,那么最新日期的相同值应该是值。
标签: r