将列的每个元素与另一个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)
答案 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]