如果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))
我将其转换为 yearmon 向量:
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))
从yearmon 对象转换为Date 对象时,分配给结果日期的月份小数部分中的参数frac。因此,要获得当月的第一天,而不是像您的问题所示转换为字符并粘贴到 "-01" 上,最好使用 frac = 0 强制转换为 Date 对象。
如果您的df 中的Date 不是yearmon 类对象,那么您可以通过将其转换为一个然后使用上述as.Date() 方法来解决您的问题。