不断地将许多列相乘以形成新变量

时间:2018-02-22 09:58:12

标签: r function loops

我最近想要不断地将许多列相乘并在R中形成一个新变量。

我发现R中有一个prod函数,它可以提供许多向量或矩阵中所有元素的乘积。

但是,我不想得到所有元素的产品。相反,我想获得每一行的产品。

我可以使用循环代码执行以下操作:

t <-
 data.frame(x1=round(round(runif(10),1)+1),
            x2=round(round(runif(10),1)+1))
for(i in 1:nrow(t)) {    t$y[i] <- prod(t[i,]) }

然而,我想知道是否有更有效的方法或简单的功能,因为我可以像prod(t$1:t$2)一样使用并得到我想要的结果。

2 个答案:

答案 0 :(得分:4)

方便的功能是来自rowProds的{​​{1}},但这需要matrixStats

matrix

如果我们需要一个适用于library(matrixStats) rowProds(as.matrix(t1)) #[1] 2 1 4 4 2 4 1 2 4 1 的{​​{1}}选项,请使用

base R

数据

data.frame

答案 1 :(得分:3)

@ akrun答案的base变体将是

x <- matrix(1:20, ncol = 4)

     [,1] [,2] [,3] [,4]
[1,]    1    6   11   16
[2,]    2    7   12   17
[3,]    3    8   13   18
[4,]    4    9   14   19
[5,]    5   10   15   20

apply(x, 1, prod)
[1]  1056  2856  5616  9576 15000

matrixStats::rowProd()相比,这也适用于data.frame

x <- as.data.frame(matrix(1:20, ncol = 4))
x$new <- apply(x, 1, prod)

> x
  V1 V2 V3 V4   new
1  1  6 11 16  1056
2  2  7 12 17  2856
3  3  8 13 18  5616
4  4  9 14 19  9576
5  5 10 15 20 15000