从R中的范围列表中查找值的每个组合

时间:2017-09-29 21:54:44

标签: r

我在R中进行动态网络分析,我有一个日期范围列表,作为数据框中的两列。我试图弄清楚如何创建一个全面的数据框/列表,其中包含每个范围内每个日期的每个可能的唯一组合。日期范围都有不同的长度。

例如:

Date1    Date2
1275     1277
1301     1303
1290     1291

我想创建一个数据框或列表,其中每个列/项代表每个范围内日期的唯一可能组合:

1      2      3      4      5      6      7...........?
1275   1276   1277   1275   1275   1275   1276........1277
1301   1301   1301   1302   1303   1302   1202........1303
1290   1290   1290   1290   1290   1291   1290........1291

我对java的直觉是转向嵌套循环,但是避免循环就像R的整个点一样,所以我觉得我的直觉一定是错的。

基于 R- all pairwise combinations of elements from two listsCalculating all possible combinations within a range in R 我已经把这个一起黑了

makeAllDateCombos <- function(earlydatecolumn, latedatecolumn){
  allDCs <- NULL
  allDCs <- as.data.frame(lapply(earlydatecolumn, function(earlydatecolumn){
    lapply(latedatecolumn, function(latedatecolumn){
      (table(earlydatecolumn:latedatecolumn))
      })
  }))
  return(allDCs)
}

allTheDCs <- makeAllDCs(collab_dates$Date1, collab_dates$Date2)

然而,这会返回错误。

Error in data.frame(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,  : 
  arguments imply differing number of rows: 16, 27, 6, 21, 26, 1, 5, 4, 31, 11, 18, 13, 15, 23, 17, 7, 10, 9, 24, 19, 33, 20 

1 个答案:

答案 0 :(得分:0)

使用较少数量的组合,这将起作用:

t(do.call(expand.grid, mapply(seq, Date1, Date2, SIMPLIFY = FALSE)))

不幸的是,从你的评论我推断你有相对大量的组合,从而破坏了同时处理所有组合的机会。我建议你可以使用https://stackoverflow.com/a/36144255/3358272https://gist.github.com/r2evans/e5531cbab8cf421d14ed略有更新。关键在于迭代每个组合并单独执行某些操作。