根据日期分配新变量

时间:2018-06-22 14:30:43

标签: r loops

我正在尝试创建一个新的时间变量,该变量分配每个ID的第一个日期以来已经过了多少个月

例如

 ID      Date      Time
aa1    1/1/2015     0
aa1    4/1/2015     3
aa1    7/1/2015     6 
aa1    10/1/2015    9
aa1    1/1/2016     12
aa1    4/1/2016     15
aa2n   10/1/2016    0
aa2n   1/1/2017     3
aa2n   4/1/2017     6 
aa2n   7/1/2017     9
aa2n   10/1/2017    12

我想输出为

{{1}}

Date变量按季度计,因此最早的季度为0,随后的每个季度为+3

谢谢!

2 个答案:

答案 0 :(得分:1)

这是lubridate + tidyverse的解决方案

library(lubridate);
library(tidyverse);
df %>%
    mutate(Date = mdy(Date)) %>%
    group_by(ID) %>%
    mutate(Time = month(Date) - month(min(Date)) + 12 * (year(Date) - year(min(Date)))) %>%
    arrange(ID, Time)
## A tibble: 11 x 3
## Groups:   ID [2]
#   ID    Date        Time
#   <fct> <date>     <dbl>
# 1 aa1   2015-01-01    0.
# 2 aa1   2015-04-01    3.
# 3 aa1   2015-07-01    6.
# 4 aa1   2015-10-01    9.
# 5 aa1   2016-01-01   12.
# 6 aa1   2016-04-01   15.
# 7 aa2n  2016-10-01    0.
# 8 aa2n  2017-01-01    3.
# 9 aa2n  2017-04-01    6.
#10 aa2n  2017-07-01    9.
#11 aa2n  2017-10-01   12.

样本数据

df <- read.table(text =
    "ID      Date
aa1    4/1/2015
aa1    10/1/2015
aa1    4/1/2016
aa1    7/1/2015
aa1    1/1/2016
aa1    1/1/2015
aa2n   4/1/2017
aa2n   10/1/2017
aa2n   10/1/2016
aa2n   1/1/2017
aa2n   7/1/2017    ", header = T)

答案 1 :(得分:0)

这是您可以执行的操作: 您可能需要将日期从格式转换为下面“日期”列的格式。

new \Foo\Bar\Hello\World