重塑列的塊可以說我有與這些列的data.table
- [R 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做的大多數事情,可能有更好的方法。更好的意思是更高效的內存,更快,和/或使用更少的代碼行。有沒有人有更好的方法來實現這一目標?
+1我不認爲會有很多與基礎R重塑問題。它總是讓我覺得'reshape'並不費力去找出'vary = list(...)'部分,尤其是當你必須在這些情況下指定'v.names'時。 – A5C1D2H2I1M1N2O1R2T1
@AnandaMahto - 我想是一個小的代價。你可以在''vary''和''''''''''''''''''''''''''''''''''''''''''''''''''''' v.names'部分。雖然這有點不方便。 – thelatemail
我在我的函數中爲這樣的目的定義了一個矢量化的'grep':'vGrep < - Vectorize(grep,「pattern」,SIMPLIFY = FALSE)'。 – A5C1D2H2I1M1N2O1R2T1