2017-04-06 6 views
0

私はベクターでdata.tableを持っているか、実際に列内のベクトルで一覧表示する細胞は、IE: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に列を追加することができます」最初の行で、私はベクトルcを有するようにcolumnsToSumで定義された列から要素を(6,8 、10,12)?事は私がcolumnsToSumベクトルにまとめる必要があるすべての列を持っているということですが、

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

:私は、私はこのような二つのベクトルを加算することができます知っています。何か案は?

答えて

2

私はこれがあなたたちはその後、私たちは順番にそれらを追加し、それぞれを追加するためにMap()を使用するReduce()を使用して、データテーブルから列のグループを取得するために.SDを使用

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

のために働くべきだと思います行は別々にそれは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

ありがとう!あなたがなぜ継承= TRUEがここにあるのかも説明できますか? – frankowiczm

+0

これは、[この問題](https://github.com/Rdatatable/data.table/issues/1712)に関連します。 '()'と 'MGET()は'限り、彼らは、変数の検索場所として異なる動作を持っています。 – MrFlick

+0

おかげでたくさん!私は2つのベクトルcolumnsToSum1とcolumnsToSum2を持っているでしょうし、私はなどcolumnsToSum2 +第二のものから新しい列(columnsToSum1からすなわち最初の列*最初のカラムとしてそれらを乗算したい場合は、また、私の手掛かりを与えることができる?私は、新しい質問をするべきでしょうか? – frankowiczm

関連する問題