2010-12-06 92 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