问题描述
我使用 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 (将#修改为@)