格式化as.Date为每月合并表

时间:2017-09-01 08:20:38

标签: r time merge time-series

我有以下数据,这些数据来自数据透视表转换(...):

df1

date        x    y
2012-04-28  ...  ...
2012-06-29  ...  ...
2012-08-31  ...  ...
2012-09-30  ...  ...

df2

date        x    y
2012-04-20  ...  ...
2012-06-30  ...  ...
2012-08-30  ...  ...
2012-09-28  ...  ...

正如您所看到的,我无法按月通过索引匹配表格。它将为某些行创建NA。因此,我想,我只能按月份时间格式。

应用了以下功能:

df1$date <- as.Date(df1$date)
df1 <- zoo(df1, df1$date)
index(df1) = as.yearmon(index(df1),"%y-%m")

返回:

df1

date               x    y
April 2012       ...  ...
June 2012        ...  ...
August 2012      ...  ...
September 2012   ...  ...

但是,最终结果应该是

df1

date       x    y
2012-04  ...  ...
2012-06  ...  ...
2012-08  ...  ...
2012-09  ...  ...

你能帮助我吗?

3 个答案:

答案 0 :(得分:2)

也许你可以从以下方面获得灵感。

x <- as.Date("2012-04-20")
format(x, format = "%Y-%m")
[1] "2012-04"

答案 1 :(得分:1)

为什么不使用已经在R中的format函数。

df1$data <- format(as.Date(df1$date), "%Y-%m")

答案 2 :(得分:0)

<强>合并

如果您的目标是创建两个动物园对象并按年/月合并它们,那么您不需要将日期列转换为字符列。相反,试试这个:

library(zoo)

z1 <- read.zoo(df1, FUN = as.yearmon)
z2 <- read.zoo(df2, FUN = as.yearmon)
z <- merge(z1, z2)

,并提供:

> z
         x.z1 y.z1 x.z2 y.z2
Apr 2012    1    2    1    2
Jun 2012    3    4    3    4
Aug 2012    5    6    5    6
Sep 2012    7    8    7    8

<强>聚合

要按月使用mean进行汇总,请尝试以下操作:

by_month <- aggregate(z, cycle, mean)

在索引显示月份编号时给出以下内容:

> by_month
  x.z1 y.z1 x.z2 y.z2
4    1    2    1    2
6    3    4    3    4
8    5    6    5    6
9    7    8    7    8

<强>积

我们现在可以使用以下方式绘制:

plot(by_month, type = "h", xlab = "month")

screenshot

注意:我们假设输入为:

Lines <- "
date        x    y
2012-04-28  1    2
2012-06-29  3    4
2012-08-31  5    6
2012-09-30  7    8"
df1 <- df2 <- read.table(text = Lines, header = TRUE)