将时间序列数据强制转换为数据框的简单方法是什么,其格式是结果数据是原始数据的摘要?
这可能是一些示例数据,存储在xts或zoo对象中:
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格式化的目的,这似乎总是随身携带年份信息。
答案 0 :(得分: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 :(得分:0)
这是一个使用tidyquant
包的解决方案,其中包括用于将数据帧强制转换为xts对象的函数as_xts()
和用于将xts对象强制转换为tibbles(“整齐”数据帧)的as_tibble()
。
重新创建数据:
> 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索引作为字符类。 rename
和mutate
用于清理日期。输出是具有日期和值的元素。
> 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