首页 > 解决方案 > 旅行模式(步行、骑自行车、驾驶) 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'))

标签: rgpsclassificationgisgeospatial

解决方案


推荐阅读