将数据帧按元素乘以一行

时间:2017-09-25 20:36:51

标签: r dataframe

我有一个数据框df和一个名为mult的行向量,其大小与df中的行相同。

我需要将df的每一行乘以mult作为逐元素乘法。但我不想写一个循环,因为可能有更快的方法来做到这一点。

以下是我失败的尝试:

df = data.frame(matrix(nrow = 5, ncol = 5))

df[,] = 5 

mult = as.data.frame(c(1,2,3,4,5))

df * t(mult[1:5,])

我是否转置mult[1:5,],我得到相同的结果。

正确答案应该是五行5 10 15 20 25的数据框。

但是,我得到的结果好像我正在以mult作为列向量进行元素乘法。

5   5   5   5   5
10  10  10  10  10
15  15  15  15  15
20  20  20  20  20
25  25  25  25  25

一次乘一行有效,但这将涉及一个循环。

我搜索了SO并发现sweep(),但它似乎不适用于我的情况。

2 个答案:

答案 0 :(得分:1)

df * matrix(rep(mult[,1], NROW(df)), nrow = NROW(df), byrow = TRUE)
#  X1 X2 X3 X4 X5
#1  5 10 15 20 25
#2  5 10 15 20 25
#3  5 10 15 20 25
#4  5 10 15 20 25
#5  5 10 15 20 25

答案 1 :(得分:1)

我们可以复制' mult'

df * mult[,1][col(df)]
#  X1 X2 X3 X4 X5
#1  5 10 15 20 25
#2  5 10 15 20 25
#3  5 10 15 20 25
#4  5 10 15 20 25
#5  5 10 15 20 25