私は次のdata.tables
ようなものを持っています:
x <- data.table(id=rep(1:3, 2), a=1:6)
y <- data.table(id=1:3, b=2:4)
次のようにマージできます。
setkey(x, id)
setkey(y, id)
x[y]
id a b
1: 1 1 2
2: 1 4 2
3: 2 2 3
4: 2 5 3
5: 3 3 4
6: 3 6 4
今、オフにx
基づいて新しい列を作成したいと思います。これはとの合計です。私はこれを行うことができます:a
b
a
b
x[y, val:=a + b]
しかし、何らかの理由で '+' 演算子がベクトル化されていないとします。計算に必要なx
場所に行単位の計算を格納するにはどうすればよいですか? x[y]
また、使用できないと仮定しますmapply
(実際の問題でmapply
は、機能に適していないため)。
私はsapply
行ごとに追加するためにそのように使用しようとしています:
x[y, sapply(1:nrow(x), function (i) a[i] + b[i])]
ただし、これは間違った結果を返します。
id V1
1: 1 3
2: 1 NA
3: 1 NA
4: 1 NA
5: 1 NA
6: 1 NA
7: 2 5
8: 2 NA
9: 2 NA
10: 2 NA
11: 2 NA
12: 2 NA
13: 3 7
14: 3 NA
15: 3 NA
16: 3 NA
17: 3 NA
18: 3 NA
私がこれを行うと、動作します:
x[y][, sapply(1:nrow(x), function (i) a[i] + b[i])]
# [1] 3 6 5 8 7 10
しかし、これを の列に割り当てようとすると、x
保存されません (新しい列を に保存しようとしているように見えるので理にかなっていますx[y]
)。
x[y][, val:=sapply(1:nrow(x), function (i) a[i] + b[i])]
上記を実行して出力を に保存する方法はありますx[, val]
か? これは私がそれを行うことになっている方法ですか、それともより多くのdata.table
方法がありますか?
x[, val:=x[y][, sapply(1:nrow(x), function (i) a[i] + b[i])]]