我有两个数据框:
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
答案 0 :(得分:2)
我们可以使用sapply
将df2
的每一列与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