我正在创建一个向量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]]
}
答案 0 :(得分:0)
选项1:
rowSums( df[ , cols] * matrix(wts, nrow=nrow(df), byrow=TRUE) )
col
中提取df
列,并将其视为矩阵A wts
填充选项2:
df[ , col[1]]*wts[1] + ... + df[ , col[4]]*wts[4]
col
中的第一列乘以wts
中的第一值