[英]Subsetting by number of observations per hour in R
我有跨越 6 周的无线电跟踪数据,当给定时间段内的检测(即观察)数量较低时,该数据不太可靠。 因此,我想对我的数据框进行子集化,以便从我的数据中排除少于 10 次检测的任何小时。 如下图 dataframe 所示,一行“电源”对应一次检测。
DateTime Power
> 1. 2018-05-21 20:56:04 30
> 2. 2018-05-21 20:56:07 20
> 3. 2018-05-21 20:56:44 35
> 4. 2018-05-21 20:56:47 37
> 5. 2018-05-21 20:57:48 26
> 6. 2018-05-21 21:32:36 35
我知道这可能涉及首先按小时进行某种计数,我认为我已经使用下面的代码实现了这一点(然后产生了下面的 dataframe),但我不确定我现在如何使用这些计数对我的初始数据帧进行子集化.
Tag201 %>%
count(Date1 = as.Date(DateTime), Hour = hour(DateTime)) %>%
group_by(Date1) %>%
complete(Date1, Hour = min(Hour):24, fill = list(n = 0)) %>%
arrange(Date1, Hour)
Date1 Hour n
<date> <int> <dbl>
1 2018-05-19 0 402
2 2018-05-19 1 4
3 2018-05-19 2 501
4 2018-05-19 3 858
5 2018-05-19 4 192
6 2018-05-19 5 19
任何帮助将不胜感激。
编辑:
我设法用下面的代码做到了这一点:
Tag201 <- Tag201 %>%
group_by(Date=floor_date(DateTime, "1 hour")) %>%
mutate(c1=length(Power))
tt <- table(Tag201$c1)
Tag201 <- subset(Tag201, c1 %in% names(tt[tt >10]))
您应该包含数据的 dput 版本,以便我们可以测试我们对您问题的答案。 我认为你可以这样做:
Tag201 %>%
mutate(Date1 = as.Date(DateTime) %>%
mutate(Hour = hour(DateTime) %>%
group_by(Date1, Hour) %>%
mutate(n = n() %>%
ungroup() %>%
group_by(Date1) %>%
complete(Date1, Hour = min(Hour):24, fill = list(n = 0)) %>%
ungroup() %>%
arrange(Date1, Hour) %>%
filter(n > 10)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.