2014-10-10 142 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] 
相关问题