gpt4 book ai didi

r - 使用 R 中的 dplyr 计算和汇总表中的总距离

转载 作者:行者123 更新时间:2023-12-04 02:09:17 26 4
gpt4 key购买 nike

我有一个由用户、序列和地理位置组成的表:x 和 y

我想按用户分组并根据顺序计算总距离

例如:

> df <- data.frame(user_id=rep(1,3), seq=1:3, x=c(1,5,3), y=c(2,3,9))
> df
user_id seq x y
1 1 1 1 2
2 1 2 5 3
3 1 3 3 9

这是计算两点之间距离的函数(欧几里得):

> d <- function(n1,n2){
+ d <- sqrt((df$y[n2]-df$y[n1])^2+(df$x[n2]-df$x[n1])^2)
+ return(d)
+ }

我想得到这样的总距离:

> df <- data.frame(user_id=1, dtot=d(1,2)+d(2,3))
> df
user_id dtot
1 1 10.45

如何使用 dplyr "group_by"并根据所有用户的序列获取总距离?

最佳答案

完成所需任务的一种方法是定义一个计算总距离的函数:

library(dplyr)
total.dist <- function(x,y) {
sum(sqrt((x-lag(x))^2+(y-lag(y))^2),na.rm=TRUE)
}

此函数的输入是列向量 xy。我们通过减去这些列的 lag 以矢量化方式计算每行之间的距离。那么总距离是所有计算距离的总和,移除NA

然后将其用作summarise 函数 group_by user_id:

res <- df %>% group_by(user_id) %>% summarise(dtot=total.dist(x,y))
### A tibble: 1 x 2
## user_id dtot
## <dbl> <dbl>
##1 1 10.44766

关于r - 使用 R 中的 dplyr 计算和汇总表中的总距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40237297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com