首页 文章

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

提问于
浏览
0

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

  • 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]
    

相关问题