2014-10-10 140 views
0

將列中每個元素與另一個行中的每個值相乘的最佳方式是什麼data.frame將數據幀列與另一個數據幀中的單個行相乘R

我想將df1[ ,1]df2[1, ]相乘,並創建尺寸爲5行x 5列的df3

df1 <- data.frame(V1 = c(10, 20, 30, 40, 50), V2=c(5, 10, 15, 20, 25)) 
> df1 
    V1 V2 
1 10 5 
2 20 10 
3 30 15 
4 40 20 
5 50 25 

df2 <- data.frame(Albany=0.5, Birmingham=1.0, Tuscany=1.5, 
        NewYork = 2, Atlanta = 2.5, Alabama = 3) 

> df2 
    Albany Birmingham Tuscany NewYork Atlanta Alabama 
1 0.5   1  1.5  2  2.5  3 

輸出應該有每個地方一列五行是這樣的:

Albany Birmingham Tuscany NewYork Atlanta Alabama 
1  5   10  15  20  25  30 
2  10   20  30  40  50  60 
3  15   30  45  60  75  90 
4  20   40  60  80  100  120 
5  25   50  75  100  125  150 

在我的真實數據集,DF1有9500行,DF2有210列。因此,我正在查找的輸出數據幀是nrow(9500)x ncol(210)

回答

4

子集data.frame的行返回data.frame。因此,你需要unlist它得到一個向量:

df1[,1] %*% t(unlist(df2[1,])) 
#  Albany Birmingham Tuscany NewYork Atlanta Alabama 
#[1,]  5   10  15  20  25  30 
#[2,]  10   20  30  40  50  60 
#[3,]  15   30  45  60  75  90 
#[4,]  20   40  60  80  100  120 
#[5,]  25   50  75  100  125  150 
2

您可以使用

df1[,1] %o% t(df2) ## same as outer(df1[,1], t(df2), "*") 
#, , 1 
# 
#  Albany Birmingham Tuscany NewYork Atlanta Alabama 
#[1,]  5   10  15  20  25  30 
#[2,]  10   20  30  40  50  60 
#[3,]  15   30  45  60  75  90 
#[4,]  20   40  60  80  100  120 
#[5,]  25   50  75  100  125  150 

爲了得到一個矩陣直接使用此:

(df1[,1] %o% t(df2))[,,1] 
相關問題