Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 两小时时间间隔的第一次子集_R_Datetime_Subset_Group By - Fatal编程技术网

R 两小时时间间隔的第一次子集

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

我在分组时间上有问题。 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  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,这正是我所需要的。谢谢:)