对 data.table 的每一行运行 distVincentyEllipsoid()

问题描述 投票:0回答:1

我想对 data.table 的每一行运行 distVincentyEllipsoid() 函数。遗憾的是,它似乎没有矢量化:

library(geosphere)
mydat[, dest_home_orig := round(distVincentyEllipsoid(c(zip_long, zip_lat), c(orig_long, orig_lat))/1609.34,1)]`

尝试过:

mydat2[,.(round(distVincentyEllipsoid(c(zip_long, zip_lat), c(orig_long, orig_lat))/1609.34,1)), by=.I]

.pointsToMatrix(p1) 中的错误:向量长度错误,应为 2

解决方法,使用 for 循环 (!)。我想要一个 data.table 解决方案(如果存在)。我看过其他答案,但它们涉及连接。这应该是一个直接的表内操作。

D放在下面:

mydat <- structure(list(zip_long = c(-65.9, -65.9, -72.52, -72.68, -72.59
), zip_lat = c(18.37, 18.37, 42.37, 42.26, 42.1), orig_long = c(-117.18972222, 
-121.92916667, -122.31166667, -87.90805556, -118.40722222), orig_lat = c(32.73361111, 
37.36277778, 47.45, 41.97722222, 33.9425)), .Names = c("zip_long", 
"zip_lat", "orig_long", "orig_lat"), row.names = c(NA, -5L), class = c("data.table", 
"data.frame")
r data.table
1个回答
0
投票

超级旧的线程,但我在尝试做同样的事情时发现了它。

library(geosphere)
mydat$distance <- apply(mydat, 1, function(row) {
  point1 <- c(as.numeric(row["zip_long"]), as.numeric(row["zip_lat"]))
  point2 <- c(as.numeric(row["orig_long"]), as.numeric(row["orig_lat"]))
  distm(point1, point2, fun = distVincentyEllipsoid)
})
© www.soinside.com 2019 - 2024. All rights reserved.