r - 将yearmon列转换为R中的月份的最后日期

标签 r zoo lubridate

我有一个数据框(df),如下所示:

Date        Arrivals

2014-07      100
2014-08      150
2014-09      200

我知道我可以将yearmon日期转换为每个月的第一天,如下所示:
df$Date <- as.POSIXct(paste0(as.character(df[,1]),"-01"), format = "%Y-%m-%d")

但是,由于我的数据要到月底才可用,因此我想将其索引到末尾而不是开始,因此我无法弄清楚。任何帮助表示赞赏。

最佳答案

如果Date变量是实际的yearmon类 vector ,则从 zoo 包中,as.Date.yearmon方法可以通过其参数frac进行所需的操作。

使用您的数据,并假设Date最初是一个字符 vector

library("zoo")
df <- data.frame(Date = c("2014-07", "2014-08", "2014-09"),
                 Arrivals = c(100, 150, 200))

我将其转换为yearmon vector :
df <- transform(df, Date2 = as.yearmon(Date))

假设这是您所拥有的,那么您可以使用as.Date()frac = 1来实现所需的功能:
df <- transform(df, Date3 = as.Date(Date2, frac = 1))

这使:
> df
     Date Arrivals    Date2      Date3
1 2014-07      100 Jul 2014 2014-07-31
2 2014-08      150 Aug 2014 2014-08-31
3 2014-09      200 Sep 2014 2014-09-30

这显示了各个步骤。如果您只想要最终的Date,则这是单线的
## assuming `Date` is a `yearmon` object
df <- transform(df, Date = as.Date(Date, frac = 1))
## or if not a `yearmon`
df <- transform(df, Date = as.Date(as.yearmon(Date), frac = 1))

frac对象转换为yearmon对象时,参数Date以月份的分数表示,以分配给结果日期。因此,要获得每月的第一天,而不是像Question所示那样转换为字符并粘贴到"-01"上,最好使用Date强制为frac = 0对象。

如果您的Date中的df不是yearmon类对象,则可以通过将其转换为一个对象,然后使用如上所述的as.Date()方法来解决问题。

关于r - 将yearmon列转换为R中的月份的最后日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37313569/

相关文章:

r - 如何在ggplot2中绘制xts?

r - 创建一个介于有序数据框中两行之间的列

r - 如何按日期获取滞后变量的差异?

r - 如何用经验 CDF 绘制估计 CDF

xml - 无法转义用于 xml 构造的 html 字符串

r - 使用 R 将连续时间序列数据转换为每日每小时表示

r - "%m %"操作符与 mapply

r - 使用ggplot2绘制时间序列数据

RForcecom 访问未知字段名称

r - 错误curlMultiperform(多句柄): embedded nul in string