使用一列的一部分在R中子集一个数据集

使用一列的一部分在R中子集一个数据集,r,csv,subset,R,Csv,Subset,为了详细说明我的上一个问题:我正在寻找R中一个大型csv数据集的子集。我希望获取“timestamp”列的信息,并仅提取从晚上7点到凌晨12点的时间间隔(包括在内)。以下是数据示例: Deer ID TimeStamp Location 1 4/16/18 12:00AM DMA 1 2 4/16/18 3:00AM DMA 1 3 4/16/18 9:30AM DMA 2 4 4/16

为了详细说明我的上一个问题:我正在寻找R中一个大型csv数据集的子集。我希望获取“timestamp”列的信息,并仅提取从晚上7点到凌晨12点的时间间隔(包括在内)。以下是数据示例:

Deer ID    TimeStamp         Location
1          4/16/18 12:00AM   DMA 1
2          4/16/18 3:00AM    DMA 1
3          4/16/18 9:30AM    DMA 2
4          4/16/18 7:00PM    DMA 1
5          4/16/18 8:30PM    DMA 2
6          4/16/18 11:00PM   DMA 3
7          4/17/18 1:30AM    DMA 2
8          4/17/18 5:00AM    DMA 1
9          4/17/18 9:00PM    DMA 3
10         4/17/18 11:30PM   DMA 1
11         4/18/18 12:30AM   DMA 2
因此,我的最终目标是以以下方式结束:

Deer ID     TimeStamp        Location
4           4/16/18 7:00PM   DMA 1
5           4/16/18 8:30PM   DMA 2
6           4/16/18 11:00PM  DMA 3
9           4/17/18 9:00PM   DMA 3
10          4/17/18 11:30PM  DMA 1

关于如何实现这一点有什么想法吗?谢谢大家!

您可以执行以下操作

# Convert TimeStamp to POSIXct 
df <- transform(df, TimeStamp = strptime(TimeStamp, "%m/%d/%Y %I:%M%p"))

# Use lubridate::hour to extract the hours from the POSIXct timestamp
library(lubridate)
df[(hour(df$TimeStamp) >= 19 & hour(df$TimeStamp) <= 24), ]
#   Deer.ID           TimeStamp Location
#4        4 0018-04-16 19:00:00    DMA 1
#5        5 0018-04-16 20:30:00    DMA 2
#6        6 0018-04-16 23:00:00    DMA 3
#9        9 0018-04-17 21:00:00    DMA 3
#10      10 0018-04-17 23:30:00    DMA 1
#将时间戳转换为POSIXct

df=19&hour(df$TimeStamp)您可以执行以下操作

# Convert TimeStamp to POSIXct 
df <- transform(df, TimeStamp = strptime(TimeStamp, "%m/%d/%Y %I:%M%p"))

# Use lubridate::hour to extract the hours from the POSIXct timestamp
library(lubridate)
df[(hour(df$TimeStamp) >= 19 & hour(df$TimeStamp) <= 24), ]
#   Deer.ID           TimeStamp Location
#4        4 0018-04-16 19:00:00    DMA 1
#5        5 0018-04-16 20:30:00    DMA 2
#6        6 0018-04-16 23:00:00    DMA 3
#9        9 0018-04-17 21:00:00    DMA 3
#10      10 0018-04-17 23:30:00    DMA 1
#将时间戳转换为POSIXct

df=19&hour(df$TimeStamp)tidyverse的方式大致如下:

库(dplyr)
df%
作为_tible()
df%>%
突变(timestamp=as.POSIXct(strtime(.data$timestamp,“%m/%d/%Y%I:%m%p”)))%>%
过滤器(介于(lubridate::hour(.data$timestamp),19,24之间)
#>#tibble:5 x 3
#>id时间戳位置
#>                     
#>14018-04-16 19:00:00 DMA 1
#>2 5 0018-04-16 20:30:00 DMA 2
#>360018-04-1623:00:003
#>490018-04-1721:00:003
#>510018-04-1723:30:00DMA 1

由(v0.2.1)于2019年2月19日创建的tidyverse道路将沿着以下路线:

库(dplyr)
df%
作为_tible()
df%>%
突变(timestamp=as.POSIXct(strtime(.data$timestamp,“%m/%d/%Y%I:%m%p”)))%>%
过滤器(介于(lubridate::hour(.data$timestamp),19,24之间)
#>#tibble:5 x 3
#>id时间戳位置
#>                     
#>14018-04-16 19:00:00 DMA 1
#>2 5 0018-04-16 20:30:00 DMA 2
#>360018-04-1623:00:003
#>490018-04-1721:00:003
#>510018-04-1723:30:00DMA 1

由(v0.2.1)于2019-02-19创建

如果此帖子复制了与前一篇相同的问题,您应该删除其中一个。其次,可能有两种方法:一些基于文本的匹配,或者(我认为最好是)基于实际时间的匹配。对于第二个,您需要一个实际存储为DateTime类的列。请参阅
?DateTimeClasses
,了解一些信息。如果这篇文章重复了与前一篇相同的问题,您应该删除其中一个。其次,可能有两种方法:一些基于文本的匹配,或者(我认为最好是)基于实际时间的匹配。对于第二个,您需要一个实际存储为DateTime类的列。有关某些信息,请参见
?DateTimeClasses