如何使用R以有效的方式计算新变量?

时间:2017-12-28 01:31:27

标签: r

我有一个包含900个观测值和121列的数据集。

我必须计算一个新列。

新列是乘以和添加多列的结果。列按照模式进行。类似的东西:

newcolumn= (C42*C82)+(C43*C83)+(C44*C84)+.....(C81*C121). 

如何以比上面输入整个公式更有效的方式做到这一点?

3 个答案:

答案 0 :(得分:2)

将矩阵A1(在您的情况下忘记前41列)划分为两个相关部分A2A1 * 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.
}