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