r - 根据日期分配新变量
问题描述
我正在尝试创建一个新的时间变量,该变量分配自每个 ID 的第一个日期以来已经过去了多少个月
例如
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
我想输出为
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
日期变量按季度计算,因此最早的季度为 0,随后的每个季度为 +3
谢谢!
解决方案
这是一个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)
推荐阅读
- python - Python MySQLdb 无法连接到服务器,SSL 问题
- apache-spark - 内存中的 apache-spark-Cache 表溢出到磁盘
- c - main 函数不调用 collatzSequencer 函数
- pdf - 将 pdf、doc、docx 文档分割成段落级文本
- c# - Google Sheet api v4 动态工作表范围
- python - 无法发送数据包(Errno 9:错误的文件描述符)
- c++ - 在 Bash 脚本中处理来自子进程的信号
- android - 如何在 Android Studio 中使用系统自定义字体
- javascript - Node.js nodemailer - 等待新的承诺解决错误
- c# - 在 C# 中的字符序列之前提取十进制/整数值