繁体   English   中英

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

[英]How to compute a new variable in an efficient way using R?

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

我必须计算一个新列。

新列是几列相乘和相加的结果。 这些列遵循一种模式。 就像是:

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

我怎样才能以更有效的方式做到这一点,而不是像上面那样输入整个公式?

它有助于将您头脑中的矩阵A (在您的情况下忘记前 41 列)划分为两个相关部分, A1A2 然后可以看到这个新列是列乘法A1 * A2的行总和的向量。 因此,例如,

rowSums(M[, 42:81] * M[, 82:121])

给出了答案。

您可以将第 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])

不如其他答案优雅,但这里有一种使用一些循环解决问题的方法:

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.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM