r - 旅行模式(步行、骑自行车、驾驶) R 中 GPS 数据的分割
问题描述
我使用 GPS 数据(1 赫兹)。我根据坐标信息计算出步行速度(米/秒)。现在我要对出行方式的类型进行分类:是步行,骑自行车,还是开车。
下面是一个数据结构的例子:
userId DateTime lon lat speedms
1 01001 2018-05-08 17:05:21 8.551420 47.41114 1.0978790
2 01001 2018-05-08 17:05:22 8.551431 47.41115 1.5707432
3 01001 2018-05-08 17:05:23 8.551439 47.41116 1.0745824
4 01001 2018-05-08 17:05:24 8.551447 47.41116 1.1682027
5 01001 2018-05-08 17:05:25 8.551452 47.41118 1.3859502
6 01001 2018-05-08 17:05:26 8.551457 47.41118 0.9657960
7 01001 2018-05-08 17:05:27 8.551461 47.41119 1.2591893
8 01001 2018-05-08 17:05:28 8.551461 47.41121 2.0004471
9 01001 2018-05-08 17:05:29 8.551462 47.41123 2.2239989
10 01001 2018-05-08 17:05:30 8.551484 47.41124 1.6928664
11 01001 2018-05-08 17:05:31 8.551496 47.41126 *2.8167094*
12 01001 2018-05-08 17:05:32 8.551533 47.41124 *3.7848781*
13 01001 2018-05-08 17:05:33 8.551529 47.41123 0.4496923
14 01001 2018-05-08 17:05:34 8.551530 47.41125 1.2248210
15 01001 2018-05-08 17:05:35 8.551530 47.41125 0.3334079
16 01001 2018-05-08 17:05:36 8.551528 47.41126 1.3421395
17 01001 2018-05-08 17:05:37 8.551525 47.41127 0.6000021
18 01001 2018-05-08 17:05:38 8.551523 47.41128 1.1215550
19 01001 2018-05-08 17:05:39 8.551518 47.41128 1.1736288
20 01001 2018-05-08 17:05:40 8.551492 47.41132 *4.3563280*
21 01001 2018-05-08 17:05:41 8.551474 47.41135 *3.6000119*
22 01001 2018-05-08 17:05:42 8.551478 47.41135 0.3017647
23 01001 2018-05-08 17:05:43 8.551493 47.41133 2.2022842
24 01001 2018-05-08 17:05:44 8.551494 47.41133 0.5607775
25 01001 2018-05-08 17:05:45 8.551480 47.41134 1.3805747
26 01001 2018-05-08 17:05:46 8.551476 47.41131 2.9052493
27 01001 2018-05-08 17:05:47 8.551471 47.41130 1.3859500
28 01001 2018-05-08 17:05:48 8.551461 47.41130 0.8248025
29 01001 2018-05-08 17:05:49 8.551460 47.41128 2.1129303
这只是数据的一个子集。我有超过 2000 万的观察结果,并且没有对“旅行”或其他任何内容进行预分类。
因此,子集中的人正在走路。但是由于 GPS 设备的噪音,存在一些异常值(标有星号)。
我可以用以下语句对 GPS 观测结果进行分类:
gps$movement <- ifelse(gps$speedms <=2.7, "walking", "not walking")
这真的是“又快又脏”……但它适用于超过 70% 的数据。现在,我想增加分类成功率。
我考虑了一个函数,它比较前后观察结果,如果(例如)最后 50 个观察值的平均值低于 2.7,它会将异常值也分类为walk。
当然,该子集仅针对步行部分显示。我也必须这样做才能开车,骑自行车。
同样,一个人先走路然后开始骑自行车的那一刻绝对是具有挑战性的。
谢谢你的帮助!
PS:或者甚至有一个特定的 r 包?(我找到了“旅行”包,但是您需要 GPS 数据已经进行了旅行分段......)
我的解决方案:
df <- df %>%
mutate(rollingAvg_60 = rollapply(speedms, 60, mean, fill=NA, align='center'))
解决方案
推荐阅读
- ios - 从 Core Data Swift 中删除值时出现错误 Domain=NSCocoaErrorDomain Code=1570
- asp.net-core - 生产 Azure 网站中的身份回调路径?
- ruby-on-rails - 如何解决捆绑程序 LoadError
- git - 图像的 Intellij 差异
- java - JAVA:为什么释放堆内存没有反映在任务管理器中
- excel - 如何结合这两个代码示例 - 拆分 excel 工作簿并从 csv 中删除语音标记
- shell - AzureDevops 发布 - 命令外壳“没有权限”
- react-native - 自定义样式未在博览会上加载
- reactjs - 返回callBack的onClick函数和直接放在onClick中的callBack有什么区别?
- c# - 除空记录外的联表(空)