如何从数据帧中总结N位数的所有可能产品?

时间:2018-06-19 07:27:41

标签: r dataframe

我有一些包含数字的数据框。并且我想对每行的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

1 个答案:

答案 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