我有一个包含900个观测值和121列的数据集。
我必须计算一个新列。
新列是乘以和添加多列的结果。列按照模式进行。类似的东西:
newcolumn= (C42*C82)+(C43*C83)+(C44*C84)+.....(C81*C121).
如何以比上面输入整个公式更有效的方式做到这一点?
答案 0 :(得分:2)
将矩阵A1
(在您的情况下忘记前41列)划分为两个相关部分A2
和A1 * A2
会有所帮助。然后可以看到这个新列是列式乘法rowSums(M[, 42:81] * M[, 82:121])
的行和的向量。因此,例如,
{{1}}
给出答案。
答案 1 :(得分:2)
您可以使用列42到81中的值的矩阵乘法(在这种情况下为内积或点积)和第82到121列中的值逐行进行此操作。在R中,%*%
是矩阵乘法运算符。这是假数据的一个例子。
# Fake data
set.seed(2)
dat = as.data.frame(replicate(121, rnorm(5)))
dat$new = apply(dat, 1, function(x) x[42:81] %*% x[82:121])
答案 2 :(得分:-1)
不如其他答案优雅,但这是使用某些循环解决问题的方法:
for (i in 1:nrow(df)) { #for each row in the dataframe
numtest <- 0 #re-initialize your placeholder sum at each row
for (j in 42:81) { #for each "multiplied" group that you want to sum up
numtest <- numtest + (df[i,j] * df[i, j+40]) #add to your placeholder
}
df[i, 122] <- numtest #fill in col 122 with final generated sum.
}