我有一个数据框,其中有多个参与者(由变量“ ID”区分)和与每行数据关联的日历日期(MM / DD / YYYY)。
我想创建一个“天”列,以计算自每个ID的第一个日历日期以来的经过天数(即,将每个参与者的第一个日期用作参考日期)。
示例结构:
ID Calendar.date Day
1 06/23/2020 1
1 06/25/2020 3
1 06/26/2020 4
2 03/24/2019 1
2 03/30/2019 7
2 03/31/2019 8
答案 0 :(得分:1)
这是一种dplyr
方法。如果您使用group_by
ID,则可以从first
日期中减去每个ID的日期。假设您的数据位于数据帧df
中:
library(dplyr)
df %>%
group_by(ID) %>%
mutate(Calendar_date = as.Date(Calendar_date, format = "%m/%d/%Y"),
Day = Calendar_date - first(Calendar_date) + 1)
对于以下输出,我修改了示例数据,以避免2月出现不可能的日期。同样,Day
的结果是一个difftime
对象。如果您只希望数字天数,请使用as.numeric
:
as.numeric(Calendar_date - first(Calendar_date))
输出
# A tibble: 6 x 3
# Groups: ID [2]
ID Calendar_date Day
<dbl> <date> <drtn>
1 1 2020-06-23 1 days
2 1 2020-06-25 3 days
3 1 2020-06-26 4 days
4 2 2019-02-20 1 days
5 2 2019-02-26 7 days
6 2 2019-02-27 8 days