在R中将字符字段转换为季度日期

时间:2015-09-03 10:13:44

标签: r

我有一个tsv,其中有四分之一格式的日期字段(名为" trim")

 trim
 1992-4
 1993-1
 ...

当我将文件作为数据框加载时,R将该字段作为字符导入。

我无法转换它,我只获得NA,即使我尝试:

 df$trim <- as.Date(df$trim, format="%Y-%q")

或加载zoo包并发送此命令:

as.yearqtr(df$trim, format="%Y-%q")

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

这会将字符串转换为"yearqtr"类和"Date"类(季度第一)和"Date"类(季度的最后一个):

library(zoo)

as.yearqtr("1992-4")
## [1] "1992 Q4"

as.Date(as.yearqtr("1992-4"))
## [1] "1992-10-01"

as.Date(as.yearqtr("1992-4"), frac = 1)
## [1] "1992-12-31"

请注意,zoo有scale_x_yearqtr用于定义适合"yearqtr"类的ggplot2 X轴。

答案 1 :(得分:2)

如果您坚持使用基本R as.Date()功能,那么您需要考虑的一个选项是将季度映射到几个月。在下面的代码中,我将季度映射到该季度发生的第一个月。然后我在"01"标记该月的第一天,然后转换为日期。

trim <- c("1992-4", "1993-1")

trim <- gsub("-1", "-01", trim)       # map first quarter to January
trim <- gsub("-2", "-04", trim)       # map second quarter to April
trim <- gsub("-3", "-07", trim)       # map third quarter to July
trim <- gsub("-4", "-10", trim)       # map fourth quarter October

trim <- paste(trim, "-01", sep="")    # add first day of the month

trim <- as.Date(trim, "%Y-%m-%d")     # convert to date

> trim
[1] "1992-10-01" "1993-01-01"

P.S。这个问题有点像this SO post。但它的不同之处值得一个新的答案IMO。

答案 2 :(得分:2)

你可以使用lubridate。 它可以使用tidyverse加载。

func setUpUI() {
    // Create a SCIChartSurface. This is a UIView so can be added directly to the UI
    sciChartSurface = SCIChartSurface(frame: self.view.bounds)
    sciChartSurface?.translatesAutoresizingMaskIntoConstraints = true

    // Add the SCIChartSurface as a subview
    self.view.addSubview(sciChartSurface!)

    // Create an XAxis and YAxis. This step is mandatory before creating series
    sciChartSurface?.xAxes.add(SCIDateTimeAxis())
    sciChartSurface?.yAxes.add(SCINumericAxis())
}