【问题标题】:Formatting as.Date as monthly to merge tables格式化为.Date 为每月合并表
【发布时间】:2018-02-10 06:26:38
【问题描述】:

我有以下数据,结果来自数据透视表 cast(...):

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  ...  ...

你能帮帮我吗?

【问题讨论】:

  • 这里为什么需要zoo?有什么具体原因吗?
  • 老实说,我对所有可用的不同软件包有点困惑。我遇到了一个描述,它显示了如何使用 zoo 将每日数据汇总到每月数据,这正是我所需要的。
  • 有没有更好的解决办法?

标签: r time merge time-series


【解决方案1】:

也许你可以从下面得到一些启发。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 那么是否仍然可以每月汇总所有列的值?现在我有一个看起来像 2012-04 2012-04 2012-04 2012-06 2012-08 的索引,我想汇总所有具有相同索引(月)的值。 apply.monthly(df1, FUN = colSums) 在这里不再起作用了。
    • 我将创建两列,一列包含年份,一列包含月份。这将使工作更容易。我可以格式化月份列并使用月份和年份进行汇总。我什至可以将月份名称用作“January, February, ...”
    【解决方案3】:

    合并

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

    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")
    

    注意:我们假设输入是:

    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)
    

    【讨论】:

      猜你喜欢
      • 2015-08-06
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 2012-04-26
      相关资源
      最近更新 更多