在大型坐标数据集中的文本中获取本地时区的最快方法是什么?我当前的方法运行良好,但是我使用的“ 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
答案 0 :(得分:2)
看到这个问题时,我偶然发现了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