我有一个数据框(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/