【发布时间】:2019-04-06 18:46:12
【问题描述】:
我有一个 data.frame 由大约 300k 行组成,每个 ID 有 24 行 - 每行代表对该 ID 的每小时观察。我的问题在于,对于某些 ID,观察在 24 小时过去之前结束 - 但仍有 24 行,其余行在其 3 个观察变量中具有 NA。
在简化表中会是这样的
ID HOUR OBS_1 OBS_2 OBS_3 MISC MISC_2
1 0 29 32 34 19 21
1 1 21 12 NA 19 21
1 2 NA 24 NA 19 21
1 3 NA NA NA 19 21
1 4 NA NA NA 19 21
2 0 41 16 21 13 24
2 1 NA NA NA 13 24
2 2 11 30 41 13 24
2 3 21 NA NA 13 24
2 4 24 35 21 13 24
2 5 NA NA NA 13 24
2 6 NA NA NA 13 24
3 0 NA NA NA 35 46
3 1 23 34 24 35 46
3 2 NA 26 NA 35 46
3 3 NA NA 24 35 46
3 4 12 29 42 35 46
3 5 NA NA NA 35 46
3 6 NA NA NA 35 46
在表格中,每个 ID 都代表一个应适当处理的场景:
-
ID 1:观察从第 0 小时开始,观察在第 3 小时结束 - 因此应删除该组的第 3 小时和第 4 小时的行
李> ID 2:有一个小时 (1),其中所有三个观察变量都设置为 NA,但观察恢复并在第 5 小时结束 - 因此应保留第 2 行 (由于注册错误而不是观察结束),应删除第 5 小时和第 6 小时的行。
ID 3:从所有三个观察变量中的 NA 行开始,但观察从下一个小时开始并在第 5 小时结束。这类似于 ID 2 的场景,但这次发生在最开始(而不是在观察的中间)。但是,这仍然表示注册错误,应保留该组中第 5 小时和第 6 小时的行。
从概念上讲,我认为一个可能的解决方案是执行 group_by ID,然后让 R 反向遍历组中的行(从下向上),直到遇到 "OBS_1"、"OBS_2" 的行和 "OBS_3" 不都是 NA 并在到达该行之前删除检查的行,然后继续检查下一组。
任何帮助将不胜感激!
【问题讨论】:
标签: r dplyr data.table