我有一個data.table DT
我怎樣才能重塑我的data.table有效
set.seed(1)
DT <- data.table(x=rep(c(1,2,3),each=4), y=c("A","B"), v=sample(1:100,12))
DT
x y v
1: 1 A 29
2: 1 B 92
3: 1 A 100
4: 1 B 82
5: 2 A 28
6: 2 B 26
7: 2 A 18
8: 2 B 22
9: 3 A 30
10: 3 B 96
11: 3 A 15
12: 3 B 4
我想擴大它像波紋管,創造的x
每個值的新列並報告v
值,在數據結構不應該期望(不是像波紋管塊)
x y v.1 v.2 v.3
1: 1 A 29 NA NA
2: 1 B 92 NA NA
3: 1 A 100 NA NA
4: 1 B 82 NA NA
5: 2 A NA 28 NA
6: 2 B NA 26 NA
7: 2 A NA 18 NA
8: 2 B NA 22 NA
9: 3 A NA NA 30
10: 3 B NA NA 96
11: 3 A NA NA 15
12: 3 B NA NA 4
我問了一個非常類似的問題here但無法適應答案摹格羅騰迪克給了我們當時的...
編輯: 像往常一樣,我寫了後我幾乎得到它......我只需要用NA代替那些0(我可能在v中得到0,我想能夠解離v == 0從缺項)
DT2 <- DT[, {SUM.<-factor(x); data.table(model.matrix(~ SUM.:v + 0))}]
txtR) DT2
SUM.1:v SUM.2:v SUM.3:v
1: 29 0 0
2: 92 0 0
3: 100 0 0
4: 82 0 0
5: 0 28 0
6: 0 26 0
7: 0 18 0
8: 0 22 0
9: 0 0 30
10: 0 0 96
11: 0 0 15
12: 0 0 4
我認爲'by = x'足夠嗎? – Arun
嗯,無論如何,所需的輸出有一個「Y」列。如果不把它放在'by'中,我會不得不做一些類似合併或DT [,c(list(y = y),v。= lapply(1:3,function(i)v [x == I])),通過= 「X」]'? – Frank
@Frank,我想是的。你現在的答案'by =「x,y」'不會與OP的要求相同。仔細查看你爲列獲得的值,並與我的數據進行比較..(除了NA,在創建model.matrix時我仍不知道如何替換)。 – Arun