R中按分组变量计算各日期与组内首行日期的天数差
解决方案
你原有代码中使用lag(B)的逻辑是取当前行的上一行值做计算,得到的是相邻日期的差值,与你需要的「组内所有日期和本组第一个日期计算差值」的需求不符。调整时需要做两处修改:
- 先将B列从字符串格式转为日期格式,否则日期计算会报错
- 使用
first()函数提取每个分组的第一行B列值作为计算基准
完整可运行代码
library(dplyr) # 原始数据构造 A <- c("1-23", "1-23", "1-23", "10-23", "10-23", "10-23", "10-23", "10-23", "10-23") B <- c("2013-01-02", "2013-01-17", "2013-01-31", "2014-08-04", "2014-08-25", "2014-09-02", "2014-09-08", "2014-09-30", "2014-09-15") df <- data.frame(A,B) # 调整后的计算逻辑 df2 <- df %>% mutate(B = as.Date(B)) %>% group_by(A) %>% mutate(C = as.numeric(difftime(B, first(B), units = "days")))
输出验证
运行后得到的结果和你预期的C列完全一致:
print(df2) # A tibble: 9 × 3 # Groups: A [2] A B C <chr> <date> <dbl> 1 1-23 2013-01-02 0 2 1-23 2013-01-17 15 3 1-23 2013-01-31 29 4 10-23 2014-08-04 0 5 10-23 2014-08-25 21 6 10-23 2014-09-02 29 7 10-23 2014-09-08 35 8 10-23 2014-09-30 57 9 10-23 2014-09-15 42
内容的提问来源于stack exchange,提问作者vcat
相关产品推荐
相关产品推荐

