如何在列表中获得data.frame对象集合的索引组合?

时间:2016-08-07 15:53:13

标签: r dataframe combinations

我在列表中有data.frame对象,并且我确实操纵了网格中所有可能的配对对象索引。现在,我想获得给定对象的索引组的不同组合。如何更轻松/更有效地实现这一目标?有谁知道为data.frame对象做这种分组索引的直接方法?

玩具数据

foo <- data.frame( start=seq(1, by=4, len=6), stop=seq(3, by=4, len=6))
bar <- data.frame(start=seq(5, by=2, len=7), stop=seq(7, by=2, len=7))
bleh <- data.frame(start=seq(1, by=5, len=5), stop=seq(3, by=5, len=5))

myList <- list(foo, bar, bleh)

使用expand.grid,我得到如下:

nn <- length(myList)
index <- expand.grid("query"=1:nn, "target"=1:nn)
index <- index[index[,1] <= index[,2],]

模拟所需的输出格式:

$foo
  query    target
1     1         1
4     1         2
7     1         3

$bar
  query    target
4     1         2
5     2         2
8     2         3

$bleh
  query    target
7     1         3
8     2         3
9     3         3

根据所需的输出,我怎样才能得到这个?是否有任何R包提供相应的方法来进行这种操作?有人可以提出可行的想法来完成这项任务吗?感谢

1 个答案:

答案 0 :(得分:2)

我们可以试试

i1 <- seq_along(myList)
l1 <- lapply(i1, function(i) seq(i))
l2 <- lapply(seq_along(i1), function(i) i1[!i1 %in% sequence(i-1)] )
Map(function(x,y) {x1 <- expand.grid(x,y)
                     x1[c(TRUE, diff(x1[,1])>=0),]}, l1, l2)
#[[1]]
#  Var1 Var2
#1    1    1
#2    1    2
#3    1    3

#[[2]]
#  Var1 Var2
#1    1    2
#2    2    2
#4    2    3

#[[3]]
#  Var1 Var2
#1    1    3
#2    2    3
#3    3    3