r - 什么是找到数据集与参考(更大)数据集的最接近时间的有效编程方法
问题描述
与大型数据集 (a) 相比,我正在寻找一种有效的方法来查找小型数据集 (x) 的最接近时间。结果必须是 (a) 长度的索引。我已经创建了一个非常好用的函数,但是,它对于大数据绝对没用,因为它需要几天的时间来处理。
Here is my function: function(x, a, which = TRUE,na.rm=FALSE){
if("POSIXt" %in% class(x)) x <- as.numeric(x)
if("POSIXt" %in% class(a)) a <- as.numeric(a)
sapply(a, function(y) DescTools::Closest(x, y, which = TRUE,na.rm=FALSE)[1])
}
数据集 x 和 a 都被过滤,因此没有一致的时间 stemp,但它们在相同的要求之后被过滤。
向量 a 包含 20 Hz 数据,长度为 16020209,x 包含 30 秒数据,长度为 26908。
任何建议都非常感谢!谢谢 :)
解决方案
可以使用来自以下位置的滚动连接data.table
:
library(data.table)
set.seed(1) # reproduciblity on Stackoverflow
DF_A <- data.table(x = seq(-500, by = 0.5, length.out = 26908),
idx = seq_len(26908))
DF_HZ <- data.table(x = round(runif(16020209, first(DF_A$x), last(DF_A$x)), 3),
idx_hz = seq_len(16020209))
DF_HZ[, x_hz := x + 0] # so we can check
DF_A[, x_a := x + 0] # so we can check
setkey(DF_A, x)
setkey(DF_HZ, x)
# The order(idx_hz) returns the result in the same order as
# DF_HZ but it is not necessary to match joins.
DF_A[DF_HZ, roll = "nearest"][order(idx_hz)]
#> x idx x_a idx_hz x_hz
#> 1: 3072.021 7145 3072.0 1 3072.021
#> 2: 4506.369 10014 4506.5 2 4506.369
#> 3: 7206.883 15415 7207.0 3 7206.883
#> 4: 11718.574 24438 11718.5 4 11718.574
#> 5: 2213.328 5428 2213.5 5 2213.328
#> ---
#> 16020205: 10517.477 22036 10517.5 16020205 10517.477
#> 16020206: 11407.776 23817 11408.0 16020206 11407.776
#> 16020207: 12051.919 25105 12052.0 16020207 12051.919
#> 16020208: 3482.463 7966 3482.5 16020208 3482.463
#> 16020209: 817.366 2636 817.5 16020209 817.366
由reprex 包(v0.3.0)于 2020 年 11 月 11 日创建
在我的机器上,以上(不包括创建虚拟数据)大约需要 3 秒。
推荐阅读
- php - How to get certain words from a text with full sentences in PHP?
- excel - 这段代码有什么问题?不断收到应用程序定义的错误
- java - Firebase Android App 在一段时间后不断崩溃
- database - 从带小数点的字符串转换为NUMERIC时如何避免舍入整数?
- ajax - django 使用来自 db(sqlite) 的 xhr 更改图像
- php - PHP - onClick 不工作并使用 PHP 标记调用“echo”视频和图像 SRC
- python - from nltk.util import Trie ImportError: cannot import name Trie
- sql - 使用 Postgresql 中的函数以常规间隔将数据从一个表同步到另一个表
- react-native - 在 React Native 上使用 onPress 更改文本颜色
- javascript - 使用 Visual Code 在 TypeScript 项目中正确配置 tsconfig.json