Этот подход дает вам больше гибкости, если вы решите, что вам нужно разное время.Вы можете найти ниже любой момент времени (не только часы).Поскольку я ленив, я сделал эту работу, рассматривая все как персонажей.
#1. Create a fake data set as chase did
set.seed(1)
dat <- data.frame(hour = sample(0:23, 100, TRUE, prob = runif(24)),
minute = sample(0:59,100, TRUE, prob = runif(60)),
second = sample(0:59,100, TRUE, prob = runif(60)))
#2. Create a function to turn your single digits double and everything into character
dig <- function(x){
ifelse(nchar(as.character(x))<2, paste("0", as.character(x), sep=""),
as.character(x))
}
#3. Use the dig function to make a character dataframe
dat <- data.frame(sapply(dat, dig))
#4. Paste hour minute and second together into new character vector
dat <- transform(dat, time=as.numeric(paste(hour, minute, second,sep="")))
#5. function to take that character vector and compare it to the cut off time
n.obs <- function(var, hour='0', min='00', sec='00', pm=FALSE){
hour <- if(pm) as.character(as.numeric(hour) + 12) else hour
bench <- as.numeric(paste(hour, min, sec, sep=""))
length(var[var<=bench])
}
#try it out
n.obs(dat$time, '2')
n.obs(dat$time, '2', pm=T)
n.obs(dat$time, '14', pm=F) #notice same as above because pm=F
n.obs(dat$time, hour='14', min='30', pm=F)