将季度年转换为 R 中季度的最后日期
convert quarter year to last date of quarter in R
我在使用 as.Date(as.yearqtr(test[,1],format ="%qQ%Y"),frac =1)
时遇到问题,但它 returns 是一个错误,而且季度至今没有改变。错误是:
error in as.yearqtr(as.numeric(x)) (list) object cannot be coerced to type 'double'
这是我在 R 中的数据框。
TIME VALUE
1Q2019 1
2Q2019 2
3Q2019 3
4Q2019 4
理想的输出是
TIME VALUE
2019-03-31 1
2019-06-30 2
2019-09-30 3
2019-12-31 4
我们可以使用 zoo 转换为日期,并使用 frac
获取季度的最后日期。我们使用一些 RegEx 以 zoo
的合适格式重新排列:
df$TIME=as.Date(as.yearqtr(gsub("(\d)(Q)(\d{1,})","\3 Q\1",df$TIME)),frac = 1)
df
TIME VALUE
1 2019-03-31 1
2 2019-06-30 2
3 2019-09-30 3
4 2019-12-31 4
数据:
df <-structure(list(TIME = structure(1:4, .Label = c("1Q2019", "2Q2019",
"3Q2019", "4Q2019"), class = "factor"), VALUE = 1:4), class = "data.frame", row.names = c(NA,
-4L))
这是一个函数,它将 return 一个日期向量,给定 1Q2019 形式的输入向量...
dateStrings <- c("1Q2019","2Q2019","3Q2019","4Q2019","1Q2020")
lastDayOfQuarter <- function(x){
require(lubridate)
result <- NULL
months <-c(3,6,9,12)
days <- c(31,30,30,31)
for(i in 1:length(x)) {
qtr <- as.numeric(substr(x[i],1,1))
result[i] <- mdy(paste(months[qtr],days[qtr],(substr(x[i],3,6)),sep="-"))
}
as.Date(result)
}
lastDayOfQuarter(dateStrings)
和输出:
>lastDayOfQuarter(dateStrings)
[1] "2019-03-31" "2019-06-30" "2019-09-30" "2019-12-31" "2020-03-31"
>
我在使用 as.Date(as.yearqtr(test[,1],format ="%qQ%Y"),frac =1)
时遇到问题,但它 returns 是一个错误,而且季度至今没有改变。错误是:
error in as.yearqtr(as.numeric(x)) (list) object cannot be coerced to type 'double'
这是我在 R 中的数据框。
TIME VALUE
1Q2019 1
2Q2019 2
3Q2019 3
4Q2019 4
理想的输出是
TIME VALUE
2019-03-31 1
2019-06-30 2
2019-09-30 3
2019-12-31 4
我们可以使用 zoo 转换为日期,并使用 frac
获取季度的最后日期。我们使用一些 RegEx 以 zoo
的合适格式重新排列:
df$TIME=as.Date(as.yearqtr(gsub("(\d)(Q)(\d{1,})","\3 Q\1",df$TIME)),frac = 1)
df
TIME VALUE
1 2019-03-31 1
2 2019-06-30 2
3 2019-09-30 3
4 2019-12-31 4
数据:
df <-structure(list(TIME = structure(1:4, .Label = c("1Q2019", "2Q2019",
"3Q2019", "4Q2019"), class = "factor"), VALUE = 1:4), class = "data.frame", row.names = c(NA,
-4L))
这是一个函数,它将 return 一个日期向量,给定 1Q2019 形式的输入向量...
dateStrings <- c("1Q2019","2Q2019","3Q2019","4Q2019","1Q2020")
lastDayOfQuarter <- function(x){
require(lubridate)
result <- NULL
months <-c(3,6,9,12)
days <- c(31,30,30,31)
for(i in 1:length(x)) {
qtr <- as.numeric(substr(x[i],1,1))
result[i] <- mdy(paste(months[qtr],days[qtr],(substr(x[i],3,6)),sep="-"))
}
as.Date(result)
}
lastDayOfQuarter(dateStrings)
和输出:
>lastDayOfQuarter(dateStrings)
[1] "2019-03-31" "2019-06-30" "2019-09-30" "2019-12-31" "2020-03-31"
>