在R

时间:2018-08-16 18:06:51

标签: r

我正在创建一个向量vsum,其长度等于数据帧df中一列的长度。 vsum的每个元素中的值等于df中来自特定列的行的总和乘以向量wts中的一个元素。我目前正在使用for循环来实现结果。使用矢量化代码或其他一些基本的R函数,有更好的方法吗?

vsum  <- vector(mode = "numeric", length = 1000)
wts <- vector(mode = "numeric", length = 4)
df <- data.frame(v1=numeric(),v2=numeric(), ... , v50=numeric())

# Values added to wts and df.  1000 rows in df.

cols <- c(3,14,25,36)

for (j in 1:4){
  vsum <- vsum + wts[j]*df[,cols[j]]
}

1 个答案:

答案 0 :(得分:0)

选项1:

rowSums( df[ , cols] * matrix(wts, nrow=nrow(df), byrow=TRUE) )
  • col中提取df列,并将其视为矩阵A
  • 创建与A尺寸相同的矩阵B,但按行wts填充
  • 然后取A * B的行和

选项2:

df[ , col[1]]*wts[1] + ... + df[ , col[4]]*wts[4]
  • 只需将col中的第一列乘以wts中的第一值
  • 重复所有列并将其累加