我有一些包含数字的数据框。并且我想对每行的N(N是整数> = 2)列的所有可能产品求和。我该怎么做?感谢您的帮助:)
#For example I want to sum all possible products of 3 digitals from 4 cols
df <- data.frame(rep(4:6,time=2),rep(6:4,time=2),rep(6:8,2),rep(8:10,2))
colnames(df) <- c(1,2,3,4)
# ideal result for first row is 4*6*6+4*6*8+6*6*8+4*6*8=816
1 2 3 4 sumproduct3
1 4 6 6 8 816 #4*6*6+4*6*8+4*6*8+6*6*8
2 5 5 7 9 1030 #5*5*7+5*5*9+5*7*9+5*7*9
3 6 4 8 10 1232 #4*8*10+6*8*10+6*4*10+6*4*8
4 4 6 6 8 ...
5 5 5 7 9 ...
6 6 4 8 10 ...
#The idea I have got so far is using combn(4,3) to generate all permutation
#but I dont know how to aply them in to df yet
> combn(4,3)
[,1] [,2] [,3] [,4]
[1,] 1 1 1 2
[2,] 2 2 3 3
[3,] 3 4 4 4
答案 0 :(得分:1)
我们编写了一个函数,该函数将为给定一个向量的n
生成所有可能产品的总和:
FUN <- function(x, n){
m <- matrix(as.numeric(combn(x, n)), nrow = n)
s <- sum(apply(m, 2, prod))
}
现在我们apply()
将此函数添加到数据框df
的所有行,并将n
指定为3:
apply(df, 1, function(x) FUN(x, 3))
结果:
[1] 816 1030 1232 816 1030 1232
这可以附加到数据框:
df$sum <- apply(df, 1, function(x) FUN(x, 3))
df
1 2 3 4 sum
1 4 6 6 8 816
2 5 5 7 9 1030
3 6 4 8 10 1232
4 4 6 6 8 816
5 5 5 7 9 1030
6 6 4 8 10 1232