相关疑难解决方法(0)

更快的组合版本

有没有办法加快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的速度(参见第二个代码片段).

我感谢任何帮助.

combinations r combn data.table

12
推荐指数
5
解决办法
2555
查看次数

润滑-查找间隔和日期之间的重叠时间

我有一个以日期时间格式转换开始和结束的数据框,如下所示:

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,匹配日期)?

r lubridate

6
推荐指数
1
解决办法
141
查看次数

标签 统计

r ×2

combinations ×1

combn ×1

data.table ×1

lubridate ×1