微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

旅行模式步行、骑自行车、驾驶在 R

如何解决旅行模式步行、骑自行车、驾驶在 R

我使用 GPS 数据 (1 hz)。我从坐标信息中计算出步行速度(米每秒)。 现在我必须对出行方式的类型进行分类是步行、自行车还是汽车。

这是一个数据结构的例子:

    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,它也会将异常值归类为 步行

当然,子集只显示了行走部分。我也必须在开车、骑自行车时这样做。

同样,一个人先走路然后开始骑自行车的那一刻也绝对是具有挑战性的。

感谢您的帮助!

PS:或者甚至有特定的 r 包? (我找到了“旅行”包,但在那里您需要带有旅行分段的 GPS 数据...)


我的解决方案:

df <- df %>%
  mutate(rollingAvg_60 = rollapply(speedms,60,mean,fill=NA,align='center'))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。