选择基于时间的唯一数据

时间:2017-02-11 00:32:45

标签: r

我有一个如下所示的数据框

"SERIAL_No.","DATE_","TIME_",
"13606855","2011/08/02","14:15"            

因此,具有特定序列号的人在一天的不同时间进行某些活动,并且有一年的数据可用。我想选择一个与上午5点后的第一个条目相对应的条目。通过这种方式,我将为特定日期提供每个序列号的单个条目。 我试过以下但我不知道这是否会起作用:

df <- df[df$TIME_ >"5:00", ] 

但是这将在凌晨5点之后选择所有条目。我不知道如何实现这一目标。请帮助,我是R的新手,我想学习这个强大的工具。

1 个答案:

答案 0 :(得分:0)

此链接(Compare time in R)中的答案有一个很好的功能,您可以使用to.time包使用chron。这对比较两次之间的差异很有用。

这是一种方法:

# create toy data 
set.seed(1)
x <- data.frame(SERIAL_No = sample(5, 10, replace = TRUE),
           Date = Sys.Date() - 1:10,
           Time = format(Sys.time() - sample(1000, 10), "%H:%M"))

# Define helper function from link above
library(chron)
to.times <- function(x) times(paste0(x, ":00"))

# Change class of Time column to times
x$Time <- to.times(x$Time)

# Isolate observations past 00:00 (can switch to 5:00 when you use your data)
x <- x[x$Time > to.times("00:00"), ]

# Find observation closest to 00:00 for each serial number
do.call(rbind, lapply(split(x, x$SERIAL_No), 
                      function(a) a[which.min(a$Time - to.times("00:00")), ]))