R 基于HH:MM:SS格式列的数据帧条件子集设置

R 基于HH:MM:SS格式列的数据帧条件子集设置,r,dataframe,subset,R,Dataframe,Subset,所以我有一个很大的df,其中有一个名为“session”的列,格式如下 HH:MM:SS(例如,0:35:24持续35分钟和24秒) 我想根据“会话”列中>2分钟或

所以我有一个很大的df,其中有一个名为“session”的列,格式如下 HH:MM:SS(例如,0:35:24持续35分钟和24秒)

我想根据“会话”列中>2分钟或<90分钟的条件创建df的子集

我尝试先将列格式转换为日期:

    df$session <- as.Date(df$session, "%h/%m/%s")

df$session可能更简单,但这里有一个解决方案:

set.seed(1234)
tDF <- data.frame(
  Val = rnorm(100),
  Session = paste0(
    sample(0:23,100,replace=TRUE),
    ":",
    sample(0:59,100,replace=TRUE),
    ":",
    sample(0:59,100,replace=TRUE),
    sep="",collapse=NULL),
  stringsAsFactors=FALSE
)
##
toSec <- function(hms){
  Long <- as.POSIXct(
    paste0(
      "2013-01-01 ",
      hms),
    format="%Y-%m-%d %H:%M:%S",
    tz="America/New_York")
  3600*as.numeric(substr(Long,12,13))+
    60*as.numeric(substr(Long,15,16))+
    as.numeric(substr(Long,18,19))
}
##
tDF <- cbind(
  tDF,
  Seconds = toSec(tDF$Session),
  Minutes = toSec(tDF$Session)/60
)
##
> head(tDF)
         Val  Session Seconds   Minutes
1 -1.2070657 15:21:41   55301  921.6833
2  0.2774292 12:58:24   46704  778.4000
3  1.0844412  7:32:45   27165  452.7500
4 -2.3456977 18:26:46   66406 1106.7667
5  0.4291247 12:56:34   46594  776.5667
6  0.5060559 17:27:11   62831 1047.1833
set.seed(1234)

一个日期和一个时期不一样。处理周期的最简单方法是使用
lubridate
包:

library(lubridate)

df$session <- hms(df$session)

df.morethan2min <- subset(df, df$session > period(2, 'minute'))
库(lubridate)

df$会话真的是“约会”吗?看起来,
as.Date
可能不是您想要的函数。请参见
?DateTimeClasses
,因为我在RTH中的日期和时间没有完全跟上进度。这比我尝试做的要容易得多。谢谢
set.seed(1234)
tDF <- data.frame(
  Val = rnorm(100),
  Session = paste0(
    sample(0:23,100,replace=TRUE),
    ":",
    sample(0:59,100,replace=TRUE),
    ":",
    sample(0:59,100,replace=TRUE),
    sep="",collapse=NULL),
  stringsAsFactors=FALSE
)
##
toSec <- function(hms){
  Long <- as.POSIXct(
    paste0(
      "2013-01-01 ",
      hms),
    format="%Y-%m-%d %H:%M:%S",
    tz="America/New_York")
  3600*as.numeric(substr(Long,12,13))+
    60*as.numeric(substr(Long,15,16))+
    as.numeric(substr(Long,18,19))
}
##
tDF <- cbind(
  tDF,
  Seconds = toSec(tDF$Session),
  Minutes = toSec(tDF$Session)/60
)
##
> head(tDF)
         Val  Session Seconds   Minutes
1 -1.2070657 15:21:41   55301  921.6833
2  0.2774292 12:58:24   46704  778.4000
3  1.0844412  7:32:45   27165  452.7500
4 -2.3456977 18:26:46   66406 1106.7667
5  0.4291247 12:56:34   46594  776.5667
6  0.5060559 17:27:11   62831 1047.1833
library(lubridate)

df$session <- hms(df$session)

df.morethan2min <- subset(df, df$session > period(2, 'minute'))