2017-09-01 59 views
0

我有以下數據,即原來透視表CAST(...)的:格式as.Date每月合併表

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

正如你所看到的,我無法企及的表通過月度指數。它會爲某些行創建NAs。因此,我想,我只能按月格式去。

以下功能被應用:

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

你能幫助我嗎?

+0

你爲什麼需要這裏的'動物園'?任何具體原因? – Aramis7d

+0

說實話,我對所有可用的不同軟件包感到困惑不解。我遇到了一個描述,說明如何將每日數據與動物園的每月數據進行彙總,這正是我所需要的。 – Fanny

+0

有沒有更好的方法來解決它? – Fanny

回答

1

你爲什麼不只是使用format功能這已經是R.

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

那麼是否仍然有可能每月彙總所有列的值? 現在我有一個類似於「2012-04」2012-04「2012-04」2012-06「2012-08」的索引,並且我想彙總具有相同索引(月)的所有值, 。 'apply.monthly(df1,FUN = colSums)'在這裏不再有效。 – Fanny

+0

我會創建兩列,一個與年份和一個月份。這將使工作更容易。我可以格式化月份列和月份和年份的彙總。我甚至可以使用月份名稱作爲「一月,二月......」 – TheRimalaya

2

也許你可以在下面得到一些啓發。

x <- as.Date("2012-04-20") 
format(x, format = "%Y-%m") 
[1] "2012-04" 
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)