2017-04-06 50 views
0

我有一個與data.table載體或實際上矢量列內部列表中的小區,即:- [R data.table:在單獨的列矢量的總和

testDATA <- data.table('COLUMN_1' = list(1:4, 11:14, 21:24), 
         'COLUMN_ABC' = list(5:8, 25:28, 15:18), 
         'COLUMN1342' = list(2:5, 32:35, 22:25)) 

另外我有一個向量的列的名稱,其矢量「分子我要總結即:

columnsToSum <- c('COLUMN_ABC', 'COLUMN1342') 

如何添加列data.table將總和向量」元素從columnsToSum限定,使得在第一行中以後會有矢量c的列(6,8- ,10,12)?我知道,我可以總結兩個向量是這樣的:

testDATA[, sumCol := list(Map(function(x,y) x + y, get('COLUMN_ABC'), get('COLUMN1342')))] 

雖然事情是,我有我應該在columnsToSum矢量和所有列。有任何想法嗎?

回答

2

我想,這應該爲你工作

testDATA[, sumCol := Reduce(function(a,b) Map(`+`,a,b), .SD), 
    .SDcols=columnsToSum] 

我們使用.SD從數據表中獲取一組列,然後我們用Reduce()順序把它們加起來,用Map()加起來每個行分開。它將與超過2列工作

columnsToSum <- names(testDATA) 
testDATA[, sumCol := Reduce(function(a,b) Map(`+`,a,b), .SD), .SDcols=columnsToSum] 
testDATA 
#  COLUMN_1 COLUMN_ABC COLUMN1342   sumCol 
# 1:  1,2,3,4  5,6,7,8  2,3,4,5  23,31,39,47 
# 2: 11,12,13,14 25,26,27,28 32,33,34,35 193,201,209,217 
# 3: 21,22,23,24 15,16,17,18 22,23,24,25 153,161,169,177 
+0

謝謝!你能否解釋爲什麼inherits = TRUE在這裏是必要的? – frankowiczm

+0

這與[此問題](https://github.com/Rdatatable/data.table/issues/1712)有關。就他們搜索變量的位置而言,get()和mget()具有不同的行爲。 – MrFlick

+0

非常感謝!如果我有兩個向量columnsToSum1和columnsToSum2,我想將它們乘以一個新列(即columnToSum1的第一列* columnToSum2的第一列+第二個列的第一列等等,我應該問一個新問題嗎? – frankowiczm