如何从列表或数据框中获取3个数字的最大乘积?

时间:2018-06-18 14:20:55

标签: r dataframe

我有一个包含数字的数据框。现在我想获得每行的N(N是整数> = 2)列的最大乘积。到目前为止我唯一的理想是使用复杂的循环。我怎么能快点做到?感谢您的帮助:)

> 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
df
  1 2 3  4 maxproductof3
1 4 6 6  8    288
2 5 5 7  9    315
3 6 4 8 10    480
4 4 6 6  8    288
5 5 5 7  9    315
6 6 4 8 10    480

3 个答案:

答案 0 :(得分:3)

我们可以使用applysort

执行此操作
df$maxproductof3 <- apply(df, 1, function(x) prod(sort(x, decreasing = TRUE)[1:3]))

<强>结果:

  1 2 3  4 maxproductof3
1 4 6 6  8           288
2 5 5 7  9           315
3 6 4 8 10           480
4 4 6 6  8           288
5 5 5 7  9           315
6 6 4 8 10           480

答案 1 :(得分:2)

您可以使用apply ...

执行此操作
N <- 3
df$maxproductof3 = apply(df, 1, function(row) prod(sort(row, decreasing=T)[1:N]))

答案 2 :(得分:1)

以下是使用database.openHelper.readableDatabase.query("PRAGMA wal_checkpoint")

的选项
pmap