我有6周的无线电跟踪数据,当在给定时间段内的检测(即观察)次数较少时,可靠性较低。因此,我想对我的数据框进行子集处理,以便从我的数据中排除少于10次检测的任何小时。如下面的数据框中所示,一行“功率”对应于一次检测。
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
我了解这可能首先需要进行小时计数,我想我已经使用下面的代码实现了(然后在下面产生了数据框),但是我不确定现在如何子集我的初始数据框这些计数。
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]))
答案 0 :(得分:0)
您应该包括数据的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)