2017-04-03 7 views
1

の対応する値によるデータフレームの各列I持って次のデータフレームとベクトル:乗算ベクター

dframe <- as.data.frame(matrix(1:9,3)) 
vector <- c(2,3,4) 

Iはvectorの対応する値によってdframeの各列を乗算したいです。これはしないだろう。

> vector * dframe 
    V1 V2 V3 
1 2 8 14 
2 6 15 24 
3 12 24 36 

dframevectorの対応する値ではなく、各カラム乗算されます。どんな慣用的な解決法がありますか、私はforサイクルで立ち往生していますか?

+1

何を使用してを使用しています*ベクトル) '? –

+0

これは重複しています。 1つの方法は 'df * rep(vec、each = nrow(df))' – lmo

答えて

2

は別のオプションは、 `トン(トン(dframe)についてsweep

sweep(dframe, 2, vector, "*") 
# V1 V2 V3 
#1 2 12 28 
#2 4 15 32 
#3 6 18 36 

それともcol

dframe*vector[col(dframe)] 
+1

です。私は2番目のオプションが一番好きです。私はあなたが夢中になり、同様の操作のシーケンスでそれを試してみたいと思っています:)私の場合、 'dframe'に' vector'を掛けた後、私は 'center'をそれに加えたいと思います。 )。このアプローチでは、 'vec2mat < - col(dframe);と書くことができます。 dframe * vector [vec2mat] + center [vec2mat] 'となります。 – DeltaIV

1

あなたはMapを使用することができます。ここでは

as.data.frame(Map(`*`, dframe, vector)) 

# V1 V2 V3 
#1 2 12 28 
#2 4 15 32 
#3 6 18 36