首页 > 解决方案 > 如何从日期创建“相对时间”变量?

问题描述

我有以下数据框:

df <- structure(list(country = c("US", "US", "US", "UK", "UK", "UK", 
"UK"), date = c("2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", 
"2020-01-05", "2020-01-06", "2020-01-07"), y = 1:7, treatment = c(0, 
1, 0, 0, 0, 1, 0)), class = "data.frame", row.names = c(NA, -7L
))

这是df:

  country date       y treatment
  US      2020-01-01 1    0
  US      2020-01-02 2    1
  US      2020-01-03 3    0
  UK      2020-01-01 4    0
  UK      2020-01-02 5    0
  UK      2020-01-03 6    1
  UK      2020-01-04 7    0

我需要创建一个变量来反映治疗前后的相对时间,治疗日期为零。所以,在这种情况下,它应该等于

relative_time = c(-1,0,1,-2,-1,0,1)

我怎样才能为每组国家创建这样一个变量?

标签: rdatetimedplyr

解决方案


还有dplyr,短一点

library(lubridate)

df %>%
    mutate(date = ymd(date)) %>%
    group_by(country) %>%
    mutate(time_to_treatment = date - date[treatment == 1])

输出

  country date           y treatment time_to_treatment
  <chr>   <date>     <int>     <dbl> <drtn>           
1 US      2020-01-01     1         0 -1 days          
2 US      2020-01-02     2         1  0 days          
3 US      2020-01-03     3         0  1 days          
4 UK      2020-01-04     4         0 -2 days          
5 UK      2020-01-05     5         0 -1 days          
6 UK      2020-01-06     6         1  0 days          
7 UK      2020-01-07     7         0  1 days   

推荐阅读