2017-04-03 67 views
1

的相應值的數據幀的各列我有以下的數據幀和向量:乘以一個向量

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

我想通過vector對應的值相乘的dframe每一列。這樣不行:

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

每個dframe是由vector相應的值,而不是每個相乘。有沒有任何習慣解決方案,或者我堅持for週期?

+1

什麼'T(T(DFRAME) *矢量) '? –

+0

這是重複的。一種方法是'df * rep(vec,each = nrow(df))' – lmo

回答

2

下面是使用另一種選擇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

我最喜歡第二種選擇。我認爲這樣會更快,如果你迷上了,並且想要在一系列類似的操作上嘗試一下:)在我的例子中,在將'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