我有一个如下所示的数据框(df):
Date Arrivals
2014-07 100
2014-08 150
2014-09 200
Run Code Online (Sandbox Code Playgroud)
我知道我可以将yearmon日期转换为每月的第一个日期,如下所示:
df$Date <- as.POSIXct(paste0(as.character(df[,1]),"-01"), format = "%Y-%m-%d")
Run Code Online (Sandbox Code Playgroud)
但是,鉴于我的数据直到月底才可用,我想将其编入索引到结尾而不是开头,我无法弄明白.任何帮助赞赏.
Rei*_*son 10
如果Date变量是实际的yearmon类向量,则从zoo包中,该as.Date.yearmon方法可以通过其参数执行您想要的操作frac.
使用您的数据,并假设Date原来是一个字符向量
library("zoo")
df <- data.frame(Date = c("2014-07", "2014-08", "2014-09"),
Arrivals = c(100, 150, 200))
Run Code Online (Sandbox Code Playgroud)
我将其转换为yearmon矢量:
df <- transform(df, Date2 = as.yearmon(Date))
Run Code Online (Sandbox Code Playgroud)
假设这是你所拥有的,那么你可以达到你想要使用的是什么as.Date()有frac = 1:
df <- transform(df, Date3 = as.Date(Date2, frac = 1))
Run Code Online (Sandbox Code Playgroud)
这使:
> 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
Run Code Online (Sandbox Code Playgroud)
这显示了各个步骤.如果你只想要最终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))
Run Code Online (Sandbox Code Playgroud)
frac从yearmon对象转换为对象时分配给结果日期的月份的参数Date.因此,要获得该月的第一天,而不是"-01"像你的问题所示转换为字符并粘贴,最好强制Date使用frac = 0.
如果Date您df的不是yearmon类对象,那么您可以通过将其转换为一个然后使用上述as.Date()方法来解决您的问题.
这是一种使用动物园包来做到这一点的方法。
R代码:
library(zoo)
df
# Date Arrivals
# 1 2014-07 100
# 2 2014-08 150
# 3 2014-09 200
df$Date <- as.Date(as.yearmon(df$Date), frac = 1)
# output
# Date Arrivals
# 1 2014-07-31 100
# 2 2014-08-31 150
# 3 2014-09-30 200
Run Code Online (Sandbox Code Playgroud)