有没有办法加快combn命令,以获得从矢量中取出的2个元素的所有独特组合?
通常这将设置如下:
# Get latest version of data.table
library(devtools)
install_github("Rdatatable/data.table", build_vignettes = FALSE)
library(data.table)
# Toy data
d <- data.table(id=as.character(paste0("A", 10001:15000)))
# Transform data
system.time({
d.1 <- as.data.table(t(combn(d$id, 2)))
})
Run Code Online (Sandbox Code Playgroud)
但是,combn使用data.table计算所有可能的组合要慢10倍(23秒对比我的计算机3秒).
system.time({
d.2 <- d[, list(neighbor=d$id[-which(d$id==id)]), by=c("id")]
})
Run Code Online (Sandbox Code Playgroud)
处理非常大的向量,我正在寻找一种通过仅计算唯一组合(如combn)来节省内存的方法,但是使用data.table的速度(参见第二个代码片段).
我感谢任何帮助.
我有一个以日期时间格式转换开始和结束的数据框,如下所示:
shift_time <- data.frame(
started_at = c("2019-09-01 02:00:00 AEST", "2019-09-02 05:00:00 AEST", "2019-11-04 20:00:00 AEDT"),
ended_at = c("2019-09-01 11:30:00 AEST", "2019-09-02 19:00:00 AEST", "2019-11-05 04:00:00 AEDT")
)
Run Code Online (Sandbox Code Playgroud)
我还有另一个带有公众假期日期的数据框,如下所示:
public_holidays <- data.frame(
hol_name = c('Cup Day', 'Christmas'),
date = c("2019-11-05", "2019-12-25")
)
Run Code Online (Sandbox Code Playgroud)
我想用新的列更新shift_time df,以记录在公共假日发生的轮班小时数-即,我要计算轮班间隔与适用的任何公共假日之间的重叠(以小时为单位)。在上面的示例中,新变量的期望值为0、0、4。
有没有办法做到这一点而无需创建很多新变量(例如,difftimes,interval,匹配日期)?