上下文,我希望将一个广泛的时间序列数据帧融合成一个长数据帧。这样我就可以在ggplot2中绘制数据并构建堆积区域图。时间序列不规律(缺少某些周末和假期)
当前数据框看起来像
df
date item_1 item_2 item_3 ...
1 1992-03-23 8.63 7.609 1.6546 ...
2 1992-03-24 7.98 7.634 1.6533 ...
...
如何将上述数据框转换为
date variable value
1 1992-03-23 item_1 8.63
2 1992-03-23 item_2 7.609
3 1992-03-23 item_3 1.6546
2 1992-03-24 item_1 7.98
使用以下代码我收到错误
> melted_df = melt(df)
Using as id variables
Error in as.Date.numer(value): 'origin' must be supplied
答案 0 :(得分:1)
你必须在融合函数中指定id.vars
作为第二个参数,它可以工作:
require(reshape)
df <- data.frame(date = as.Date(c("1992-03-23", "1992-03-24")),
item_1 = c(8.63, 7.98),
item_2 = c(7.609, 7.634),
item_3 = c(1.6546, 1.6533))
melt(df, "date")
你会得到:
date variable value
1 1992-03-23 item_1 8.6300
2 1992-03-24 item_1 7.9800
3 1992-03-23 item_2 7.6090
4 1992-03-24 item_2 7.6340
5 1992-03-23 item_3 1.6546
6 1992-03-24 item_3 1.6533
希望这会有所帮助
答案 1 :(得分:0)
或gather
library(tidyverse)
df <- data.frame(date = as.Date(c("1992-03-23", "1992-03-24")),
item_1 = c(8.63, 7.98),
item_2 = c(7.609, 7.634),
item_3 = c(1.6546, 1.6533))
df %>% gather(variable, value, -date)
给出,
date variable value
1 1992-03-23 item_1 8.6300
2 1992-03-24 item_1 7.9800
3 1992-03-23 item_2 7.6090
4 1992-03-24 item_2 7.6340
5 1992-03-23 item_3 1.6546
6 1992-03-24 item_3 1.6533