r - 基于两个连续观测值之间的最长距离的子集数据框
问题描述
我有下面的数据框,我想对它进行子集化,以便在name
覆盖两个连续观察之间的最长距离时它应该找到观察。如果出现一种情况,即name
同时移动完全相同的米数,则选择最近的。
所以我希望最终结果为 2 行。那些距离最长的结果,如果有多个结果对,则只保留最近的。然后我会拿这 2 个点并将它们显示在地图上。
这是我的数据:
name<-c("bal","bal","bal","bal","bal","bal","bal","bal")
LAT<-c(54.77127,54.76542,54.76007,54.75468,54.74926 ,54.74385,54.73847,54.73228)
LON<-c(18.99692,18.99361,18.99059 ,18.98753,18.98447,18.98150,18.97842,18.97505 )
dtime<-c("2016-12-16 02:37:02","2016-12-16 02:38:02","2016-12-16 02:38:32","2016-12-16 02:39:08",
"2016-12-16 02:39:52","2016-12-16 02:41:02","2016-12-16 02:42:02","2016-12-16 02:42:32")
df<-data.frame(name,LAT,LON,dtime)
anf这就是我认为我应该计算距离的方式
library(geosphere)
distm(c(as.numeric(df[1,3]),as.numeric(df[1,2])), c(as.numeric(df[2,3]),as.numeric(df[2,2])), fun = distHaversine)
这关于时差:
difftime("2016-12-19 11:33:01", "2016-12-19 11:31:01", units = "secs")
但我怎样才能将它们结合起来?
解决方案
我认为你可以用一个管道做所有事情dplyr
library(dplyr)
df %>%
group_by(name) %>%
mutate(lag_LAT = lag(LAT), lag_LON = lag(LON)) %>%
mutate(distance = diag(distm(cbind(lag_LON, lag_LAT), cbind(LON, LAT), fun = distHaversine)),
timespan = difftime(dtime, lag(dtime), units = "secs")) %>%
slice_max(distance) %>%
slice_max(dtime) %>%
ungroup()
#> # A tibble: 1 x 8
#> name LAT LON dtime lag_LAT lag_LON distance timespan
#> <chr> <dbl> <dbl> <chr> <dbl> <dbl> <dbl> <drtn>
#> 1 bal 54.7 19.0 2016-12-16 02:42:32 54.7 19.0 722. 30 secs
鉴于您在评论中的要求,我添加了第一个mutate
以跟踪先前的位置,以便您以后可以绘制它。将所有内容放在一个唯一的行中,这比有两个分开的行要好得多。
使用第二个mutate
,您可以计算两个以下点之间的距离和时间差。我没有质疑距离的计算是否正确。我以为你比我更清楚。
第一个slice_max
确定最大距离,而第二个是必要的,以防第一个中的平局(您说您正在寻找最近的平局)。
我group
编辑是因为我认为您的数据集中可能有多个name
。
我不明白为什么你需要计算时差,但我留下了它。
推荐阅读
- sql - 无法从 Visual Studio SSDT SSIS 包在新创建的数据库中创建表,出现错误“无法使用连接管理器连接到源”
- bash - Bash - 连接到 ssh(未经授权),抓取 MOTD 文件并退出
- react-native - 将本机帖子图像反应到服务器所需的请求部分“文件”不存在
- c++ - 有没有办法在进程内部调整模块的大小,或者将模块扩展为更长的内存?
- python - 将对称矩阵加载到 pandas DataFrame 中,其中文件具有 3 列格式(行、列、数据)
- c++ - 如何正确实现和访问各种自定义算子枚举器?
- javascript - Javascript - 设置浏览器 Cookie
- c++ - C++ 将目录中的所有文件与 ::filesystem 进行比较
- c++ - Vulkan,为什么验证层(以及规范的扩展)禁止管道不写入某些附件?
- amazon-web-services - 如何更改 Amazon AWS S3 存储桶中每个请求的用户“角色”?