在R中我有以下数据表,每天一行。但每小时观察值存储在列中。我希望每个时间戳和观察值有一行。
Day x1 x2 x3 x4
2018-01-31 31a 31b 31c 31d
2018-01-30 30a 30b 30c 30d
2018-01-29 29a 29b 29c 29d
如何将表格转换为以下结果?
Day hour value
2018-01-31 x1 31a
2018-01-31 x2 31b
2018-01-31 x3 31c
2018-01-31 x4 31d
2018-01-30 x1 30a
2018-01-30 x2 30b
2018-01-30 x3 30c
2018-01-30 x4 30d
2018-01-29 x1 29a
2018-01-29 x2 29b
2018-01-29 x3 29c
2018-01-29 x4 29d
答案 0 :(得分:0)
使用data.table,(重塑将类似)
library(data.table)
DT <- setDT(read.table(text = "Day x1 x2 x3 x4
2018-01-31 31a 31b 31c 31d
2018-01-30 30a 30b 30c 30d
2018-01-29 29a 29b 29c 29d", header = T))
melt(DT,measure.vars = patterns("^x"))
Day variable value
1: 2018-01-31 x1 31a
2: 2018-01-30 x1 30a
3: 2018-01-29 x1 29a
4: 2018-01-31 x2 31b
5: 2018-01-30 x2 30b
6: 2018-01-29 x2 29b
7: 2018-01-31 x3 31c
8: 2018-01-30 x3 30c
9: 2018-01-29 x3 29c
10: 2018-01-31 x4 31d
11: 2018-01-30 x4 30d
12: 2018-01-29 x4 29d
library(tidyr)
DT %>%
gather( variable,value,-Day)