【发布时间】:2017-10-01 07:53:41
【问题描述】:
我正在 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 lists 和 Calculating 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
【问题讨论】:
-
t(do.call(expand.grid, mapply(seq, Date1, Date2, SIMPLIFY = FALSE)))可能会起作用。 -
这绝对是在正确的轨道上。 mapply(seq...) 有效,但 do.call(expand.grid, ...) 使 rstudio 崩溃。
-
@r2evans 感谢您的建议。使用一小部分范围(小于 5),您的解决方案可以完美运行,因此如果您想将其作为答案提交,我会接受它。以我拥有的内存量,我需要找到另一个解决方案,也许是总排列的子样本,以弄清楚约会的变化如何影响动态网络指标。
-
真正的源数据有多大?如果您正在聚合或过滤该新矩阵,则可以执行“懒惰”
expand.grid而不会耗尽内存并导致 R 崩溃。
标签: r