将数据帧列与另一个数据帧中的单个行R相乘

时间:2014-10-10 19:42:37

标签: r dataframe matrix-multiplication multiplication

将列的每个元素与另一个data.frame行中的每个值相乘的最佳方法是什么?

我想将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)

2 个答案:

答案 0 :(得分:4)

subsetting 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

答案 1 :(得分: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]