3

に次のデータ テーブルがあるとしますR

L3 <- LETTERS[1:3]
(d <- data.table(cbind(x = 1, y = 1:10), fac = sample(L3, 10, replace = TRUE)))
vecfx=c(5.3,2.8)

そして、次の 2 つの新しい変数を計算したいと思いdot1ますdot2

d[,dot1:=5.3*x]
d[,dot2:=2.8*y] 

しかし、これは私の問題の緩和であるため、この方法でそれらを計算したくありません。私の元の問題でvecfxは、12 個の要素で構成され、データ テーブルには 12 個の列があるため、その 12 回の書き込みを避けたいと考えています。

私はこれを試しました:vecfx*d[,list(x,y)]しかし、私は望ましい結果を得ていません(製品は列ではなく行で行われているようです)。また、データ テーブル内にこれら 2 つの新しい変数を作成したいと考えていますd

これは、 のデータ テーブル内に同時に複数の列を作成する場合にも役立ちますR

どんな助けでも大歓迎です。

4

2 に答える 2

8

アルンの答えは良いです。

LHS と RHS は:=複数のアイテムを受け入れるため、別の方法は次のとおりです。

d[,paste0("dot",1:2):=mapply("*",vecfx,list(x,y),SIMPLIFY=FALSE)]
d
    x  y fac dot1 dot2
 1: 1  1   C  5.3  2.8
 2: 1  2   B  5.3  5.6
 3: 1  3   C  5.3  8.4
 4: 1  4   C  5.3 11.2
 5: 1  5   B  5.3 14.0
 6: 1  6   A  5.3 16.8
 7: 1  7   A  5.3 19.6
 8: 1  8   B  5.3 22.4
 9: 1  9   A  5.3 25.2
10: 1 10   A  5.3 28.0

たぶんそれよりも良い方法があります。forただし、Arun の方が高速で、読みやすいと思います。

于 2013-09-24T20:15:51.873 に答える