2017-04-01 37 views
0

我想在data.table中明智地應用多個乘法列。例如:如何高效地執行列明智乘法?

require(data.table) 
DT <- data.table(a=1:5,b=2:6,c=3:7, 
       d=rep(1,5),e=rep(0,5),f=rep(-1,5))  

我想* d,b *表E和C * f的結果,因爲我有400列乘400另一列, 不知有一些有效的解決方案。謝謝!

回答

3

乘以一個由其他列集:

> DT[,1:3]*DT[,4:6] 
    a b c 
1: 1 0 -3 
2: 2 0 -4 
3: 3 0 -5 
4: 4 0 -6 
5: 5 0 -7 

爲了您的問題比較大,有800列,它應該僅僅是:

> DT[,1:400]*DT[,401:800] 
+0

謝謝!我想知道這是否可以通過colnames完成並附加到原始data.table? – user1730977

+0

@ user1730977'DT [,(new_names):= DT [,1:400] * DT [,401:800]]'工作,在這裏填寫new_names對象。不過,我認爲這在data.table中是一個非常不規範的事情。是的,你可以輸入col名稱代替1:400和401:800。 – Frank

0

是的,它很容易,但我困惑太長!

DT[,paste0("a",1:3):= DT[,1:3]*DT[,4:6]] 
+0

爲什麼不接受其他答案,而不是發佈自己的答案。他確實給你答案。你沒有提到有關在問題中添加新列的任何內容。 –

+0

對不起!這是我的第一個問題,隨着Spacedman的回答,我意識到如何去做。謝謝提醒我! – user1730977

-1

另一種方法:

DT[, Reduce('*',list(DT[,c("a","b","c")],DT[,c("d","e","f")]))]