查找属于 R 中同一组的观察日期之间的天数

问题描述 投票:0回答:1

我有一个数据集

df <- data.frame(ID=c(1, 2, 3, 4, 5, 6),
                 type=c('type1','type2','type1','type1','type2', 'type3'),
                 date=c('01/01/2014','01/06/2015','01/06/2015','07/04/2017','05/10/2018', '05/01/2026'))

我想计算属于同一组的 ID 的日期之间的天数

结果将类似于以下数据框中变量 days_in_ Between 中的值

data.frame(ID=c(1, 2, 3, 4, 5, 6),
          type=c('type1','type1','type1','type2', 'type2','type3'),
          date=c('01/01/2014','01/06/2015','07/04/2017', '01/06/2017','05/10/2018', '05/01/2026'),
          days_in_between = c(NA, 370, 910, NA, 489, NA))

我已经尝试过这个方法,有效

df%>%group_by(type)%>%mutate(diff=date-lag(date))

但它有点慢,因为我有一个非常大的数据集。只是想知道是否有更快的选择?

r dplyr
1个回答
0
投票

我会先将它们分成两个数据框,只是为了操作时清晰起见

也只是确保数据是日期类型

希望这能回答问题!

df <- data.frame(ID=c(1, 2, 3, 4, 5, 6),
                 type=c('type1','type2','type1','type1','type2', 'type3'),
                 date=c('01/01/2014','01/06/2015','01/06/2015','07/04/2017','05/10/2018', '05/01/2026'))

df$date <- dmy(df$date)

df1 <- df %>%
  filter(type == 'type1') %>%
  mutate(diff = date - lag(date))

df2 <- df %>%
  filter(type == 'type2') %>%
  mutate(diff = date - lag(date))

combined_df <- bind_rows(df1, df2)
© www.soinside.com 2019 - 2024. All rights reserved.