将年份列转换为R中月份的最后一个日期

时间:2016-05-19 03:40:42

标签: r zoo lubridate

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

但是,鉴于我的数据直到月底才可用,我想将其编入索引到结尾而不是开头,我无法弄清楚。任何帮助表示赞赏。

3 个答案:

答案 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