R中lapply中的匿名函数(使用haversine计算距离)
Anonymous function in lapply (calculate distance using haversine)in R
我需要使用 pracma 库中的 haversine 函数计算开始坐标和结束坐标之间的距离。我打算像这样使用 haversine 函数:
distance <- haversine(c(start_lat,start_lng),c(end_lat,end_lng),R = 6371.0)
我需要对数据框中的所有可用记录执行此操作,并将其存储为同一数据框中名为 distance 的列。下面给出了一个示例数据框:
start_lat <- c(41.9359, 41.8604, 41.9359, 41.8969, 41.8708)
start_lng <- c(-87.6784, -87.6258, -87.6784, -87.6217, -87.625)
end_lat <- c(41.9493, 41.8708, 41.9171, 41.9080, 41.8708)
end_lng <- c(-87.6463, -87.6257, -87.7102, -87.6315, -87.6257)
df <- data.frame(start_lat = start_lat,
start_lng = start_lng,
end_lat = end_lat,
end_lng = end_lng)
我正在考虑使用 lapply 函数来获得这个 done.I 对 R 很陌生,我无法完全理解我们如何实现这个。
我这样试过:
df$dsitance <- lapply(df,function(x){
start_coord <- x[c("start_lat","start_lng")]
end_coord <- x[c("end_lat","end_lng")]
dist <- haversine(start_coord ,end_coord , R= 6371.0)
return(dist)})
我很难从函数中的列访问数据。感谢任何帮助。
如果你想用 lapply
为每一行应用函数,你可以这样做:
df$distance <- lapply(seq(nrow(df)),function(x){
start <- unlist(df[x, c("start_lat","start_lng")])
end <- unlist(df[x, c("end_lat","end_lng")])
haversine(start, end, R= 6371.0)
})
简单的方法:
library(spatialrisk)
library(dplyr)
start_lat <- c(41.9359, 41.8604, 41.9359, 41.8969, 41.8708)
start_lng <- c(-87.6784, -87.6258, -87.6784, -87.6217, -87.625)
end_lat <- c(41.9493, 41.8708, 41.9171, 41.9080, 41.8708)
end_lng <- c(-87.6463, -87.6257, -87.7102, -87.6315, -87.6257)
df <- data.frame(start_lat = start_lat,
start_lng = start_lng,
end_lat = end_lat,
end_lng = end_lng)
df %>%
mutate(dist = spatialrisk::haversine(start_lat, start_lng, end_lat, end_lng))
#> start_lat start_lng end_lat end_lng dist
#> 1 41.9359 -87.6784 41.9493 -87.6463 3047.88841
#> 2 41.8604 -87.6258 41.8708 -87.6257 1157.75239
#> 3 41.9359 -87.6784 41.9171 -87.7102 3363.98884
#> 4 41.8969 -87.6217 41.9080 -87.6315 1478.54766
#> 5 41.8708 -87.6250 41.8708 -87.6257 58.02598
由 reprex package (v2.0.0)
于 2021-05-16 创建
或不使用dplyr::mutate()
:
df$dist <- spatialrisk::haversine(df$start_lat, df$start_lng,
df$end_lat, df$end_lng)
由 reprex package (v2.0.0)
于 2021-05-16 创建
我需要使用 pracma 库中的 haversine 函数计算开始坐标和结束坐标之间的距离。我打算像这样使用 haversine 函数:
distance <- haversine(c(start_lat,start_lng),c(end_lat,end_lng),R = 6371.0)
我需要对数据框中的所有可用记录执行此操作,并将其存储为同一数据框中名为 distance 的列。下面给出了一个示例数据框:
start_lat <- c(41.9359, 41.8604, 41.9359, 41.8969, 41.8708)
start_lng <- c(-87.6784, -87.6258, -87.6784, -87.6217, -87.625)
end_lat <- c(41.9493, 41.8708, 41.9171, 41.9080, 41.8708)
end_lng <- c(-87.6463, -87.6257, -87.7102, -87.6315, -87.6257)
df <- data.frame(start_lat = start_lat,
start_lng = start_lng,
end_lat = end_lat,
end_lng = end_lng)
我正在考虑使用 lapply 函数来获得这个 done.I 对 R 很陌生,我无法完全理解我们如何实现这个。
我这样试过:
df$dsitance <- lapply(df,function(x){
start_coord <- x[c("start_lat","start_lng")]
end_coord <- x[c("end_lat","end_lng")]
dist <- haversine(start_coord ,end_coord , R= 6371.0)
return(dist)})
我很难从函数中的列访问数据。感谢任何帮助。
如果你想用 lapply
为每一行应用函数,你可以这样做:
df$distance <- lapply(seq(nrow(df)),function(x){
start <- unlist(df[x, c("start_lat","start_lng")])
end <- unlist(df[x, c("end_lat","end_lng")])
haversine(start, end, R= 6371.0)
})
简单的方法:
library(spatialrisk)
library(dplyr)
start_lat <- c(41.9359, 41.8604, 41.9359, 41.8969, 41.8708)
start_lng <- c(-87.6784, -87.6258, -87.6784, -87.6217, -87.625)
end_lat <- c(41.9493, 41.8708, 41.9171, 41.9080, 41.8708)
end_lng <- c(-87.6463, -87.6257, -87.7102, -87.6315, -87.6257)
df <- data.frame(start_lat = start_lat,
start_lng = start_lng,
end_lat = end_lat,
end_lng = end_lng)
df %>%
mutate(dist = spatialrisk::haversine(start_lat, start_lng, end_lat, end_lng))
#> start_lat start_lng end_lat end_lng dist
#> 1 41.9359 -87.6784 41.9493 -87.6463 3047.88841
#> 2 41.8604 -87.6258 41.8708 -87.6257 1157.75239
#> 3 41.9359 -87.6784 41.9171 -87.7102 3363.98884
#> 4 41.8969 -87.6217 41.9080 -87.6315 1478.54766
#> 5 41.8708 -87.6250 41.8708 -87.6257 58.02598
由 reprex package (v2.0.0)
于 2021-05-16 创建或不使用dplyr::mutate()
:
df$dist <- spatialrisk::haversine(df$start_lat, df$start_lng,
df$end_lat, df$end_lng)
由 reprex package (v2.0.0)
于 2021-05-16 创建