将数据帧乘以另一个df中的x个向量,返回x个新数据帧

时间:2018-01-08 01:50:17

标签: r

我有两个数据框:

df1 = data.frame("a" = c(.2, 0, .3), "b" = c(.3, .1, .4), "c" = c(.5,.9, .3))
df2 = data.frame("X"= c(41, 40, 100), "Y" = c(19, 20, 15), "Z" = c(8, 6, 10))

很容易将df1的每一行乘以df2第一列的相应行:

dfX = df1 * df2[,1]

然后对列进行总结:

dfX = colSums(dfX)

返回

  a    b    c 
38.2 56.3 86.5 

如何在df2中的每一列上执行此操作,生成数据帧dfX,dfY,dfZ等?我想然后对这些新数据帧进行行绑定然后进行转置,生成:

    X    Y    Z
a 38.2  8.3  4.6
b 56.3 13.7  7.0
c 86.5 32.0 12.4

2 个答案:

答案 0 :(得分:2)

我们可以使用sapplydf2的每一列与df1相乘,然后将colSums乘以它们。

sapply(df2, function(x) colSums(df1 * x))

#    X    Y    Z
#a 38.2  8.3  4.6
#b 56.3 13.7  7.0
#c 86.5 32.0 12.4

答案 1 :(得分:2)

我们可以用crossproduct

来做到这一点
t(df1) %*% as.matrix(df2)
#     X    Y    Z
#a 38.2  8.3  4.6
#b 56.3 13.7  7.0
#c 86.5 32.0 12.4