我有一个数据框(df),如下所示:
Date Arrivals
2014-07 100
2014-08 150
2014-09 200
我知道我可以将每年的日期转换为每个月的第一个日期,如下所示:
df$Date <- as.POSIXct(paste0(as.character(df[,1]),"-01"), format = "%Y-%m-%d")
但是,鉴于我的数据直到月底才可用,我想将其编入索引到结尾而不是开头,我无法弄清楚。任何帮助表示赞赏。
答案 0 :(得分:10)
如果Date
变量是实际的yearmon
类向量,则从 zoo 包中,as.Date.yearmon
方法可以通过其参数执行您想要的操作{ {1}}。
使用您的数据,并假设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))
个对象转换为frac
个对象时,分配给结果日期的月份中的参数yearmon
。因此,要获得该月的第一天,而不是像问题所示转换为Date
上的字符并粘贴,最好使用"-01"
强制转换为Date
个对象。< / p>
如果frac = 0
中的Date
不是df
类对象,那么您可以通过将其转换为1来解决问题,然后使用yearmon
方法如上所述。
答案 1 :(得分:4)
这是使用zoo包的方法。
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
答案 2 :(得分:3)
使用as.Date()
,您可以添加一个月并减去一天以获得该月的最后一天:
lubridate