R 以不同的单位展开时间序列
我有一个时间序列,看起来像:R 以不同的单位展开时间序列,r,dplyr,time-series,tidyverse,R,Dplyr,Time Series,Tidyverse,我有一个时间序列,看起来像: id date type 1 1 2019-06-16 1_month 2 1 2019-07-16 1_month 3 1 2019-08-08 1_month 4 1 2019-09-04 3_months 5 2 2019-01-23 1_month 6 2 2019-05-05 1_month 7 2 2019-07-10 3_months 8 3 2019-07-02 1_month 9
id date type
1 1 2019-06-16 1_month
2 1 2019-07-16 1_month
3 1 2019-08-08 1_month
4 1 2019-09-04 3_months
5 2 2019-01-23 1_month
6 2 2019-05-05 1_month
7 2 2019-07-10 3_months
8 3 2019-07-02 1_month
9 3 2020-04-18 3_months
10 4 2019-03-10 1_month
11 4 2019-04-08 1_month
library(tidyverse)
df <- data.frame(stringsAsFactors=FALSE,
id = c(1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4),
date = c("2019-06-16", "2019-07-16", "2019-08-08", "2019-09-04",
"2019-01-23", "2019-05-05", "2019-07-10",
"2019-07-02", "2020-04-18", "2019-03-10", "2019-04-08"),
type = c("1_month", "1_month", "1_month", "3_months", "1_month",
"1_month", "3_months", "1_month", "3_months",
"1_month", "1_month")
)
但我得到:
Error in seq.default(date, by = "30 days", length.out = 3) :
'from' must be a finite number
感谢您的帮助这可能可以更有效地完成,但我认为这会让您获得所需的元素,并根据“真实”数据集进行一点控制:
库(tidyverse)
图书馆(lubridate)
df%
as_tible()%>%
分开(类型,分为=c(“数字”,“日期类型”))%>%
变异(
数字=作为数字(数字),
日期=截止日期(日期)
) %>%
行()
变异(
日期=日期%m+%个月(数字-1),
日期顺序=列表(顺序日期(日期,日期结束,按=“1个月”))
) %>%
unnest(日期)
#>#tibble:17 x 6
#>id日期编号日期类型日期结束日期
#>
#>1 2019-06-16 1个月2019-06-16 2019-06-16
#>2019-07-16一个月2019-07-16 2019-07-16
#>3 1 2019-08-08 1个月2019-08-08 2019-08-08
#>4 1 2019-09-04 3个月2019-11-04 2019-09-04
#>5 1 2019-09-04 3个月2019-11-04 2019-10-04
#>6 1 2019-09-04 3个月2019-11-04 2019-11-04
#>7 2 2019-01-23 1个月2019-01-23 2019-01-23
#>8 2 2019-05-05 1个月2019-05-05 2019-05-05
#>9 2 2019-07-10 3个月2019-09-10 2019-07-10
#>10 2 2019-07-10 3个月2019-09-10 2019-08-10
#>11 2 2019-07-10 3个月2019-09-10 2019-09-10
#>12 3 2019-07-02 1个月2019-07-02 2019-07-02
#>13 3 2020-04-18 3个月2020-06-18 2020-04-18
#>14 3 2020-04-18 3个月2020-06-18 2020-05-18
#>15 3 2020-04-18 3个月2020-06-18 2020-06-18
#>16 4 2019-03-10 1个月2019-03-10 2019-03-10
#>17 4 2019-04-08一个月2019-04-08 2019-04-08
由(v0.3.0)于2020年5月11日创建的我们可以从
lubridate
包中获得一些帮助。关键是在date
列中按顺序添加30天作为列表,然后unest
该列
library(tidyverse)
library(lubridate)
df2 <- df %>%
mutate(type2 = as.integer(str_replace(type, "_month$|_months$", ""))) %>%
mutate(date = ymd(date)) %>%
mutate(dates = map2(date, type2, function(x, y){
seq_num <- 0:(y - 1)
date_seq <- map_chr(seq_num, function(i) as.character(x + days(i * 30)))
return(date_seq)
})) %>%
select(id, date = dates) %>%
unnest(cols = date) %>%
mutate(type = "1_month")
df2
# # A tibble: 17 x 3
# id date type
# <dbl> <chr> <chr>
# 1 1 2019-06-16 1_month
# 2 1 2019-07-16 1_month
# 3 1 2019-08-08 1_month
# 4 1 2019-09-04 1_month
# 5 1 2019-10-04 1_month
# 6 1 2019-11-03 1_month
# 7 2 2019-01-23 1_month
# 8 2 2019-05-05 1_month
# 9 2 2019-07-10 1_month
# 10 2 2019-08-09 1_month
# 11 2 2019-09-08 1_month
# 12 3 2019-07-02 1_month
# 13 3 2020-04-18 1_month
# 14 3 2020-05-18 1_month
# 15 3 2020-06-17 1_month
# 16 4 2019-03-10 1_month
# 17 4 2019-04-08 1_month
库(tidyverse)
图书馆(lubridate)
df2%
mutate(type2=as.integer(str_replace(type,“_month$| _months$”,”)%>%
突变(日期=ymd(日期))%>%
mutate(日期=map2(日期,类型2,函数(x,y){
序号%
unnest(cols=日期)%>%
变异(type=“1个月”)
df2
##A tibble:17 x 3
#id日期类型
#
#2019-06-16一个月
#2019-07-16一个月
#2019-08-08一个月
#4.1 2019-09-04一个月
#5.1 2019-10-04一个月
#6.1 2019-11-03一个月
#7 2 2019-01-23一个月
#8 2 2019-05-05一个月
#9 2 2019-07-10一个月
#1022019-08-09一个月
#11 2 2019-09-08一个月
#12 3 2019-07-02一个月
#13 3 2020-04-18一个月
#14 3 2020-05-18一个月
#15 3 2020-06-17一个月
#16 4 2019-03-10一个月
#17 4 2019-04-08一个月
Error in seq.default(date, by = "30 days", length.out = 3) :
'from' must be a finite number
library(tidyverse)
library(lubridate)
df2 <- df %>%
mutate(type2 = as.integer(str_replace(type, "_month$|_months$", ""))) %>%
mutate(date = ymd(date)) %>%
mutate(dates = map2(date, type2, function(x, y){
seq_num <- 0:(y - 1)
date_seq <- map_chr(seq_num, function(i) as.character(x + days(i * 30)))
return(date_seq)
})) %>%
select(id, date = dates) %>%
unnest(cols = date) %>%
mutate(type = "1_month")
df2
# # A tibble: 17 x 3
# id date type
# <dbl> <chr> <chr>
# 1 1 2019-06-16 1_month
# 2 1 2019-07-16 1_month
# 3 1 2019-08-08 1_month
# 4 1 2019-09-04 1_month
# 5 1 2019-10-04 1_month
# 6 1 2019-11-03 1_month
# 7 2 2019-01-23 1_month
# 8 2 2019-05-05 1_month
# 9 2 2019-07-10 1_month
# 10 2 2019-08-09 1_month
# 11 2 2019-09-08 1_month
# 12 3 2019-07-02 1_month
# 13 3 2020-04-18 1_month
# 14 3 2020-05-18 1_month
# 15 3 2020-06-17 1_month
# 16 4 2019-03-10 1_month
# 17 4 2019-04-08 1_month