R 两小时时间间隔的第一次子集
我在分组时间上有问题。 1) 我想按时间间隔过滤数据,其中一个在午夜,另一个在中午。 2) 我只需要在每个时间间隔内发生的第一次 数据框看起来像这样R 两小时时间间隔的第一次子集,r,datetime,subset,group-by,R,Datetime,Subset,Group By,我在分组时间上有问题。 1) 我想按时间间隔过滤数据,其中一个在午夜,另一个在中午。 2) 我只需要在每个时间间隔内发生的第一次 数据框看起来像这样 DATE v 1 2007-07-28 00:41:00 1 2 2007-07-28 02:00:12 5 3 2007-07-28 02:01:19 3 4 2007-07-28 02:44:08 2 5 2007-07-28 04:02:18 3 6 2007-07-28 09:59:16 4 7 20
DATE v
1 2007-07-28 00:41:00 1
2 2007-07-28 02:00:12 5
3 2007-07-28 02:01:19 3
4 2007-07-28 02:44:08 2
5 2007-07-28 04:02:18 3
6 2007-07-28 09:59:16 4
7 2007-07-28 11:21:32 8
8 2007-07-28 11:58:40 5
9 2007-07-28 13:20:52 4
10 2007-07-28 13:21:52 9
11 2007-07-28 14:41:32 3
12 2007-07-28 15:19:00 9
13 2007-07-29 01:01:48 2
14 2007-07-29 01:41:08 5
DATE v
2 2007-07-28 02:00:12 5
9 2007-07-28 13:20:52 4
13 2007-07-29 01:01:48 2
结果应该是这样的
DATE v
1 2007-07-28 00:41:00 1
2 2007-07-28 02:00:12 5
3 2007-07-28 02:01:19 3
4 2007-07-28 02:44:08 2
5 2007-07-28 04:02:18 3
6 2007-07-28 09:59:16 4
7 2007-07-28 11:21:32 8
8 2007-07-28 11:58:40 5
9 2007-07-28 13:20:52 4
10 2007-07-28 13:21:52 9
11 2007-07-28 14:41:32 3
12 2007-07-28 15:19:00 9
13 2007-07-29 01:01:48 2
14 2007-07-29 01:41:08 5
DATE v
2 2007-07-28 02:00:12 5
9 2007-07-28 13:20:52 4
13 2007-07-29 01:01:48 2
可复制代码
DATE<-c("2007-07-28 00:41:00", "2007-07-28 02:00:12","2007-07-28 02:01:19", "2007-07-28 02:44:08", "2007-07-28 04:02:18","2007-07-28 09:59:16", "2007-07-28 11:21:32", "2007-07-28 11:58:40","2007-07-28 13:20:52", "2007-07-28 13:21:52", "2007-07-28 14:41:32","2007-07-28 15:19:00", "2007-07-29 01:01:48", "2007-07-29 01:41:08")
v<-c(1,5,3,2,3,4,8,5,4,9,3,9,2,5)
hyljes<-data.frame(cbind(DATE,v))
df <-subset(hyljes, format(as.POSIXct(DATE),"%H") %in% c ("01":"02","13":"14"))
DATE试试看
hyljes[c(1,head(cumsum(rle(as.POSIXlt(hyljes$DATE)$hour<13)$length)+1,-1)),]
##日期五
## 1 2007-07-28 00:41:00 1
## 9 2007-07-28 13:20:52 4
## 13 2007-07-29 01:01:48 2
as.POSIXlt(hyljes$DATE)$hour<13
提供时间是在中午之前还是之后
rle(…)$length
提供真与假的运行长度
- 上述+1的
cumsum
为您提供每次运行中第一条记录的索引
head(…,-1)
最后一个元素的修剪
c(1,…)
添加回第一个索引-该索引应始终包含在定义中
这里有很多小操作,但最终结果会让你达到你需要的位置:
hyljes <- [YOUR DATA]
hyljes$DATE <- as.POSIXct(hyljes$DATE, format = "%Y-%m-%d %H:%M:%S")
hyljes$hour <- strftime(hyljes$DATE, '%H')
hyljes$date <- strftime(hyljes$DATE, '%Y-%m-%d')
hyljes$am_pm <- ifelse(hyljes$hour < 12, 'am', 'pm')
mins <- ddply(hyljes, .(date, am_pm), summarise, min = min(DATE))$min
hyljes[hyljes[, 1] %in% mins, 1:2]
DATE v
1 2007-07-28 00:41:00 1
9 2007-07-28 13:20:52 4
13 2007-07-29 01:01:48 2
hyljes出现第一个问题的原因是,当您执行01:02
R时,它以一种有意义的方式显示,即12
(一个数字向量),而foramt
将其显示为“01”“02”(一个字符)。因此,要解决您的第一个问题,请将:
替换为,
这样的df,这正是我所需要的。谢谢:)