OP 已请求重新调整输入数据的日期/值对,以便列出每个日期的值。
为此需要两个步骤:
- 同时将多个值列从宽格式调整为长格式
- 重新调整为宽格式,但只有一个日期列
data.table 包中的melt() 函数能够同时重塑多个值列。第 1、3、5、... 列包含日期字符串,而第 2、4、6、... 列包含数值。
library(data.table)
long <- melt(setDT(input), measure.vars = list(date = seq(1, ncol(raw), by = 2),
value = seq(2, ncol(raw), by = 2)))
long
variable date value
1: 1 2007-06-11 1509
2: 1 2007-06-12 1493
3: 1 2007-06-13 1324
4: 2 2007-06-11 1138
5: 2 2007-06-13 1200
6: 2 2007-06-14 1122
7: 3 2008-01-17 990
8: 3 2008-01-18 800
9: 3 2008-01-19 880
现在,重新调整为宽幅面。 rowid() 函数用于创建值的压缩视图:
dcast(long, date ~ rowid(date, prefix = "V"))
date V1 V2
1: 2007-06-11 1509 1138
2: 2007-06-12 1493 NA
3: 2007-06-13 1324 1200
4: 2007-06-14 1122 NA
5: 2008-01-17 990 NA
6: 2008-01-18 800 NA
7: 2008-01-19 880 NA
或者,这些值可以显示为“稀疏矩阵”,原始列组编号作为列标题。
dcast(long, date ~ variable)
date 1 2 3
1: 2007-06-11 1509 1138 NA
2: 2007-06-12 1493 NA NA
3: 2007-06-13 1324 1200 NA
4: 2007-06-14 NA 1122 NA
5: 2008-01-17 NA NA 990
6: 2008-01-18 NA NA 800
7: 2008-01-19 NA NA 880
数据
library(data.table)
input <- fread(
"2007-06-11 1509 2007-06-11 1138 2008-01-17 990
2007-06-12 1493 2007-06-13 1200 2008-01-18 800
2007-06-13 1324 2007-06-14 1122 2008-01-19 880"
)