我想使用dplyr
來計算一組lon/lat/timestamp座標的日出時間,使用maptools的sunriset
函數。這是一個可重現的例子。使用maptools :: sunriset()內部變異
library(maptools)
library(dplyr)
pts <- tbl_df(data.frame(
lon=c(12.08752,12.08748,12.08754,12.08760,12.08746,12.08748),
lat=c(52.11760,52.11760,52.11747,52.11755,52.11778,52.11753),
timestamp=as.POSIXct(
c("2011-08-12 02:00:56 UTC","2011-08-12 02:20:22 UTC",
"2011-08-12 02:40:15 UTC","2011-08-12 03:00:29 UTC",
"2011-08-12 03:20:26 UTC","2011-08-12 03:40:30 UTC"))
))
pts %>% mutate(sunrise=sunriset(as.matrix(lon,lat),
timestamp,POSIXct.out=T,
direction='sunrise')$time)
當我運行這段代碼,我得到的錯誤
"Error: invalid subscript type 'closure'"
我猜這意味着我沒有通過變量引入sunriset
正確。
這種方法做的工作,如果我做沒有dplyr
pts$sunrise<-sunriset(as.matrix(select(pts,lon,lat)),
pts$timestamp, POSIXct.out=T,
direction='sunrise')$time
不過,我有大量的行(約65億美元)和上面的方法實在是太慢了,即使有一個小部分。我希望dplyr會更快。如果有人對哪種方法可能最快有其他建議,我很樂意聽到他們。
您可以使用data.table嘗試以下操作。 setDT(pts)[,日出:= sunriset(矩陣(c(lon,lat),ncol = 2,nrow = 6,byrow = FALSE),timestamp,POSIXct.out = T,direction ='sunrise')[2 ]] []' – jazzurro
矩陣副本(+ sunriset不是C/C++支持的事實)真的是花時間@jazzurro(我擴展了我的答案)。 – hrbrmstr
@hrbrmstr我明白了。在這種情況下,使用dplyr或data.table將不會加快此過程。感謝您的信息。 :) – jazzurro