Я создаю вектор 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]]
}
Большое спасибо, Роланд. Я смог воспроизвести свои ожидаемые результаты с% *%. Спасибо за помощь новичку в R!





Опция 1:
rowSums( df[ , cols] * matrix(wts, nrow=nrow(df), byrow=TRUE) )
col из df и обработайте их как матрицу Awts по строкам.Вариант 2:
df[ , col[1]]*wts[1] + ... + df[ , col[4]]*wts[4]
col на первое значение в wts.Спасибо, Дэн Ю. Мне удалось воспроизвести мои циклы for с помощью следующих ... rowSums (df [, cols] * matrix (wts, nrow = nrow (df), ncol = length (wts), byrow = TRUE))
У меня сейчас недостаточно репутации, чтобы засчитать мой голос "за". Я очень ценю, что вы помогаете новичку в R. :)
То, что вы описываете, это простое умножение матриц. Превратите data.frame в матрицу, а затем используйте% *%.