在R中移动数据表单元格

时间:2018-01-31 20:21:38

标签: r dataframe datatable

在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

1 个答案:

答案 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
与tidyr

library(tidyr)
DT %>%
gather( variable,value,-Day)