r - 从坐标大数据集中获取时区的最快方法(一百万个坐标或更多)
问题描述
在大型坐标数据集的文本中获取本地时区的最快方法是什么?我目前的方法工作正常,但我使用的包“rundel/timezone”(这对小集合来说很简单而且非常棒)对于大集合来说相当慢。
有没有更快的方法来完成下面复制的任务?:
library(data.table)
#REPRODUCE DATA
data <- data.table(latitude=sample(seq(47,52,by=0.001), 1000000, replace = TRUE),
longitude=sample(seq(8,23,by=0.001), 1000000, replace = TRUE))
###get timezone package via rundel/timezone
if (!require("timezone")) devtools::install_github("rundel/timezone")
library(timezone)
###CURRENT SLOW METHOD
system.time(data[,timezone:=find_tz(longitude,latitude),])
user system elapsed
49.017 21.394 74.086
解决方案
lutz
当我看到这个问题时,我碰巧找到了包裹。这个包似乎适用于 OP。我想在这里留个便条会很好。在包中,有一个名为tz_lookup_coords()
. 您可以使用此功能以两种方式设置方法。一个是method = "fast"
,另一个是method = "accurate"
。如果您想要速度,请选择第一个选项。如果您想要准确性,请选择第二个选项。我留下以下结果。你会看到时间上的巨大差异。
library(lutz)
set.seed(111)
data <- data.table(latitude=sample(seq(47,52,by=0.001), 1000000, replace = TRUE),
longitude=sample(seq(8,23,by=0.001), 1000000, replace = TRUE))
system.time(data[, timezone := tz_lookup_coords(lat = latitude, lon = longitude, method = "fast")])
#user system elapsed
#6.46 3.42 9.92
#Warning message:
#Using 'fast' method. This can cause inaccuracies in timezones
#near boundaries away from populated ares. Use the 'accurate'
#method if accuracy is more important than speed.
system.time(data[, timezone := tz_lookup_coords(lat = latitude, lon = longitude, method = "accurate")])
# user system elapsed
#154.44 0.18 154.93
推荐阅读
- saml - 具有多个 OuputClaims 的 Azure AD B2C 自定义策略 SAML 导致 AADB2C:发生异常
- asp.net-mvc-4 - 在 azure devops 上构建 asp.net mvc 4.5 网站
- ios - 滚动到特定索引 UICollectionView
- c# - Umbraco 7 LINQ 在日期范围内过滤模型儿童
- python - 楼层划分和划分的运算符优先级
- .net - macOS 上的 Quantum 开发工具包中的 Q# 编译器错误
- perl - Perl:非阻塞管道 - 只收到一条消息
- html - 为什么我的 AngularJS 变量作为文字代码传递?
- jquery - 在 jQuery 中使用 this 仅针对选择器的一个实例
- psql - 如何使用 psql 上传大文本文件?