复杂的R函数用于选择最大值

时间:2014-10-15 13:17:25

标签: r function

我有一个数据框......

a <- c(6,9,12,13,15,20)
b <- c(1,12,36,2,48,3)
c <- c(50,0,2,35,12,60)
df = data.frame(a,b,c)
#   a  b  c
#1  6  1 50
#2  9 12  0
#3 12 36  2
#4 13  2 35
#5 15 48 12
#6 20  3 60

我想做的是

  • 从第一列中的第一个数字开始
  • 然后在下一列中选择值更高的数字
  • 然后选择下一列(第三列)中的数字,该数字的值高于第二列的值......等(最多100列)
  • 由于可能存在多个数字较高的实例(例如:6,12,50是一个组合.6,36,50是另一个,等等。该功能必须考虑所有组合。
  • 然后转到第一列中的第二个数字并重新开始,等等

如果没有更高的数字,该函数只会终止并仅报告最后一个更高的数字

输出是一个数据框,其中每列是组合

这可以在R中作为一个函数吗?

输出可以是以下格式的数据框

c1 <- c(6,12,50)
c2 <- c(6,36,50)
c3 <- c(6,48,50)
c4 <- c(9,12,50)
c5 <- c(9,36,50)
c6 <- c(9,48,50)
c7 <- c(12,36,50)
c8 <- c(12,48,50)
c9 <- c(13,36,50)
c10 <- c(13,48,50)
c11 <- c(15,36,50)
c12 <- c(15,48,50)
c13 <- c(20,36,50)
c14 <- c(20,48,50)
etc
df1 <- data.frame(c1, c2, c3, c4, etc)
#  c1 c2 c3 c4 ...
#1  6  6  6  9 ...
#2 12 36 48 12 ...
#3 50 50 50 50 ...

1 个答案:

答案 0 :(得分:2)

这为您提供了从first列到last列的数字增加的所有组合

 df1 <- do.call(`expand.grid`,lapply(df, unique))
 df2 <- df1[Reduce(`&`,lapply(1:(ncol(df1)-1),
                function(i) df1[,i+1]>df1[,i])),]

 head(df2)
 #    a  b  c
 #7   6 12 50
 #8   9 12 50
 #13  6 36 50
 #14  9 36 50
 #15 12 36 50
 #16 13 36 50

 dim(df2)
 #[1] 30  3