我正在尝试创建一个新的时间变量,该变量分配每个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
谢谢!
答案 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