我想对 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")
超级旧的线程,但我在尝试做同样的事情时发现了它。
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)
})