data <- data.frame(cust_id=1:5,
a=c(10,20,30,40,50),
b=c(5,10,15,20,25),
c=c(20,40,60,80,100),
d=c(2,4,6,8,10))
vect <- c(a*2,b*3,c*4,d*5)
这里我需要从每个cust_id(1:5)的数据集中获取a,b,c,d的值作为向量,然后将它们乘以2,3,4,5这是常量< / em>的
vect <- c(40*2,20*3,80*4,8*5)
*注意:vect是一个向量,我需要以向量形式输出。
a,b,c,d是来自每个cust_id
的数据的变量值
答案 0 :(得分:0)
我们可以使用crossprod
(如果我们需要乘以然后sum
)
crossprod(t(data[-1]), 2:5)
如果只需要将相应的列乘以vector
sweep(data[-1], 2, 2:5, "*")
或mapply
mapply(`*`, data[-1], 2:5)
答案 1 :(得分:0)
您想将矩阵的矢量化点积乘以矢量:
as.matrix(data[,c('a','b','c','d')]) %*% c(2,3,4,5)
[,1]
[1,] 125
[2,] 250
[3,] 375
[4,] 500
并且由于您还希望传播cust_id
列,因此最简单的方法是将输入数据框的cust_id
列切开,然后将其单独绑定回结果:
df.out <- data.frame(cust_id = data[,'cust_id'],
result = as.matrix(data[,c('a','b','c','d')]) %*% c(2,3,4,5))
cust_id result
1 1 125
2 2 250
3 3 375
4 4 500
5 5 625