可以说我有data.table
这些列
nodeID
hour1aaa
hour1bbb
hour1ccc
hour2aaa
hour2bbb
hour2ccc
...
hour24aaa
hour24bbb
hour24ccc
总共 72 列。让我们称之为rawtable
我想重塑它,所以我有
nodeID
hour
aaa
bbb
ccc
总共只有这 5 列,其中小时列将包含原始 72 中的任何一个小时。让我们称之为newshape
我现在这样做的方式是使用rbindlist
24 个项目,其中每个项目都是更大 data.table 的正确子集。像这样(除了我在我的例子中大部分时间都没有)
newshape<-rbindlist(list(
rawtable[,list(nodeID, Hour=1, aaa=hour1aaa, bbb=hour1bbb, ccc=hour1ccc)],
rawtable[,list(nodeID, Hour=2, aaa=hour2aaa, bbb=hour2bbb, ccc=hour2ccc)],
rawtable[,list(nodeID, Hour=24, aaa=hour24aaa, bbb=hour24bbb, ccc=hour24ccc)]))
这是一些可以使用的示例数据
rawtable<-data.table(nodeID=c(1,2),hour1aaa=c(12.4,32),hour1bbb=c(61.1,65.33),hour1ccc=c(-4.2,54),hour2aaa=c(12.2,1.2),hour2bbb=c(12.2,5.7),hour2ccc=c(5.6,101.9),hour24aaa=c(45.2,8.5),hour24bbb=c(23,7.9),hour24ccc=c(98,32.3))
使用我的rbindlist
方法可以得到想要的结果,但是就像我用 R 做的大多数事情一样,可能有更好的方法。更好是指内存效率更高、速度更快和/或使用更少的代码行。有没有人有更好的方法来实现这一目标?