r - 按组求和总距离
问题描述
我每小时都有一个 df 跟踪点的移动。我想通过添加每小时坐标之间的距离来找到该组/试验的总距离,但我对应用函数感到困惑。
我想说“在每个组/试验中,总和 [distance(hour1-hou2), distance(hour2=hour3), distance(hour3-hour4)....] 直到当前时间,所以在每一行,我都有一个累积行驶距离值。
我在下面创建了一个假 df。
paths <- data.frame(matrix(nrow=80,ncol=5))
colnames(paths) <- c("trt","trial","hour","X","Y")
paths$trt <- rep(c("A","B","C","D"),each=20)
paths$trial <- rep(c(rep(1,times=10),rep(2,times=10)),times=4)
paths$hour <- rep(1:10,times=8)
paths[,4:5] <- runif(160,0,50)
#this shows the paths that I want to measure.
ggplot(data=paths,aes(x=X,y=Y,group=interaction(trt,trial),color=trt))+
geom_path()
我可能想添加一列paths$dist.traveled
来跟踪每小时。
我想我可以使用apply
或者甚至可以使用,aggregate
但我一直在使用PointDistance
来查找距离,所以我有点困惑。我也不想在循环中做一个循环,因为真正的数据集很大。
解决方案
这是一个使用的答案{dplyr}
:
library(dplyr)
paths %>%
arrange(trt, trial, hour) %>%
group_by(trt, trial) %>%
mutate(dist_travelled = sqrt((X - lag(X))^2 + (Y - lag(Y))^2)) %>%
mutate(total_dist = sum(dist_travelled, na.rm = TRUE)) %>%
ungroup()
如果您想要总距离但仅按trt
而不是分组,trial
您只需将其从调用中删除即可group_by()
。
推荐阅读
- php - CBC 模式下的 AES(块大小 128 位),在 PHP 8 中使用 PKCS#5 填充
- python - Python:使用 seaborn 的消费热图
- angular - 如何以角度从另一个组件调用函数?
- reactjs - Redux Toolkit:state.filter 未更改 state 而 state.map 更改
- python - 将 args 传递给 Python3 中的 Tkinter 回调验证函数,这可能吗?
- c - 面对此错误:tempCodeRunnerFile.c:3:38:注意:预期为“int *”,但参数为“int”类型 void printArray(int row,int col,int *marks){
- mysql - 如何让我的查询返回列名以及 MariaDB 中的相应数据?
- json.net - 属性的自定义 JSON.net 序列化/反序列化
- c# - 通过 http 使用 ASP.NET Core gRPC 服务时获取此“Grpc.Core.RpcException”
- spring-boot - 试图启动招摇但给出连接被拒绝错误