2010-12-06 131 views
4

將時間序列數據強制轉換爲數據幀的簡單方法是什麼?這種格式的結果數據是原始數據的摘要?R:將xts或動物園對象轉換爲數據幀

這可能是一些示例性的數據,存儲在XTS或動物園對象:

t,     V1 
"2010-12-03 12:00", 10.0 
"2010-11-04 12:00", 10.0 
"2010-10-05 12:00", 10.0 
"2010-09-06 12:00", 10.0 
...and so on, monthly data for many years. 

,我想將其轉換到等的數據幀:

year, month, V1 
2010, 12, a descriptive statistic calculated of that month's data 
2010, 11, ... 
2010, 10, ... 
2010, 9,  ... 

原因我問這個問題,是因爲我想在同一個圖中繪製每月計算的數據摘要。對於後一種格式的數據,我可以非常輕鬆地做到這一點,但尚未找到時間序列格式的繪圖方法。

例如,我可以在每天的時間間隔內測量幾年的溫度數據,並且我想繪製同一圖表中每年的月平均溫度曲線。我沒有弄清楚如何使用xts格式的數據來做到這一點,或者如果這甚至適合數據的xts/zoo格式化的目的,這些數據似乎總是帶有年份信息。

+2

你知道這是永遠不會太晚接受一些答案爲「最佳答案」 – 2011-02-17 18:06:50

回答

6

請提供一個可用的數據樣本,我會盡量提供一個不太一般的答案。基本上,您可以使用apply.monthly來計算您的xts對象的摘要統計信息。然後,您可以將索引轉換爲yearmon並將xts對象轉換爲data.frame。

x <- xts(rnorm(50), Sys.Date()+1:50) 
mthlySumm <- apply.monthly(x, mean) 
index(mthlySumm) <- as.yearmon(index(mthlySumm)) 
Data <- as.data.frame(mthlySumm) 
+1

你可以拉出來的年份和月份以`format`與像`as.numeric線(格式(指數(X) 「%Y」))`和`as.numeric(format(index(x),「%m」))` – 2010-12-06 17:33:52

0

以下是使用tidyquant包,它包括用於強迫數據幀XTS對象和as_tibble()用於強迫XTS對象tibbles(「整潔」的數據幀)的功能as_xts()的溶液。

重塑你的數據:

> data_xts 
      V1 
2010-09-06 10 
2010-10-05 10 
2010-11-04 10 
2010-12-03 10 

使用as_tibble()轉換爲tibble。 preserve_row_names = TRUE添加了一個名爲「row.names」的列,其中的xts索引作爲字符類。 A renamemutate用於清理日期。輸出是一個包含日期和值的小數點。

> data_df <- data_xts %>% 
    as_tibble(preserve_row_names = TRUE) %>% 
    rename(date = row.names) %>% 
    mutate(date = as_date(date)) 
> data_df 
# A tibble: 4 × 2 
     date V1 
     <date> <dbl> 
1 2010-09-06 10 
2 2010-10-05 10 
3 2010-11-04 10 
4 2010-12-03 10 

您可以更進一步,使用mutate函數添加其他字段,如日,月和年。

> data_df %>% 
    mutate(day = day(date), 
      month = month(date), 
      year = year(date)) 
# A tibble: 4 × 5 
     date V1 day month year 
     <date> <dbl> <int> <dbl> <dbl> 
1 2010-09-06 10  6  9 2010 
2 2010-10-05 10  5 10 2010 
3 2010-11-04 10  4 11 2010 
4 2010-12-03 10  3 12 2010