我有一个数据框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()
,但它似乎不适用于我的情况。
答案 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