我最近想要不断地将许多列相乘并在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)
一样使用并得到我想要的结果。
答案 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