2
是否可以使用data.table來通過多個組變量來標準化一些變量?使用data.table按組進行標準化
DT <- data.table(V1=1:20, V2=40:21, gr=c(rep(c('a'),10), rep(c('b'),10)),
grr=rep(c(rep(c('a'),5), rep(c('b'),5)),2))
gr和grr是組變量。我想添加到data.table V1.z和V2.z中,這是每個gr-by-grr組中的標準化分數。
以下是一個極其愚蠢的代碼,解釋一下我想:
DTaa <- DT[gr=='a' & grr=='a',]
DTab <- DT[gr=='a' & grr=='b',]
DTba <- DT[gr=='b' & grr=='a',]
DTbb <- DT[gr=='b' & grr=='b',]
DTaa <- DTaa[,V1.z := scale(V1)]
DTaa <- DTaa[,V2.z := scale(V2)]
DTab <- DTab[,V1.z := scale(V1)]
DTab <- DTab[,V2.z := scale(V2)]
DTba <- DTba[,V1.z := scale(V1)]
DTba <- DTba[,V2.z := scale(V2)]
DTbb <- DTbb[,V1.z := scale(V1)]
DTbb <- DTbb[,V2.z := scale(V2)]
DTn <- rbind(DTaa, DTab, DTba, DTbb)
也許,有一種方法中的一個或兩行使用by
做到這一點。
- 我希望然後在接受數據的功能使用它,所述目標變量(在本例中,V1和V2),和基團的變量(在本例中,GR和GRR)作爲參數。
- 如果你有一個不使用data.table的解決方案,它也是很好的(我嘗試了使用dplyr中的mutate_at,但是找不到關於該函數的很多文檔)。
@YBA很高興它適合你。請閱讀指導[這裏](http://stackoverflow.com/help/someone-answers) – akrun
驚人的。謝謝。 後續問題: 我將V3和V4添加到data.table,您的代碼仍然知道只轉換前兩個變量。這很好,但它是如何工作的?我的意思是,data.table如何知道我們只想在第一列和第二列上執行操作?我在這裏看到的唯一的東西是在paste0中,但這只是新變量的名稱。如果我想要使用第1列和第2列的名稱並在第3列和第4列上執行操作(如果我有這些列),該怎麼辦? – YBA
@YBA通常,'.SD'包含'by'列中沒有指定的所有列,即'(gr,grr)'。假設你有一些其他的列,你只需要在'V1'和'V2'上進行操作,在'.SDcols'中指定,例如'.SDcols = V1:V2',然後循環顯示'.SD'該職位。 – akrun