我有几小时的时间数据:分钟:秒:毫秒。我还有一个描述每个时间点发生的事情。我的数据集示例如下:
StartTime <- c("00:00:00:00", "00:00:14:04", "00:01:51:06", "00:03:30:02")
Events <- c("Start whistle", "Pass", "Shot", "Pass")
RawData <- data.frame(StartTime, Events)
我现在希望根据StartTime
列中播放的分钟数创建一个新列。我的预期输出是:
MinutesPlayed <- c(0, 0, 2, 3)
我尝试使用以下代码进行舍入,但是它包含日期(我的工作不需要),并且仍然以H:M:S格式保留时间。
RawData$MinutesPlayed <- strptime(RawData$StartTime, "%H:%M:%S")
我哪里出错?
答案 0 :(得分:3)
如果你进行四舍五入,那么最后一个元素应该达到4(从30.02秒到1分钟)。这是一个使用strptime()
的想法,将会议记录四舍五入。
## replace the last colon with a decimal point
st <- sub("(.*):(.*)", "\\1.\\2", StartTime)
## convert to POSIXlt and grab the rounded minutes
round(strptime(st, "%H:%M:%OS"), "mins")$min
# [1] 0 0 2 4
答案 1 :(得分:1)
sapply(strsplit(as.character(RawData$StartTime),":"), function(x)
#Use 'ceiling' or 'round' instead of 'floor' as needed
floor(as.numeric(x[1])*60 + #hours to minutes
as.numeric(x[2]) + #minutes
as.numeric(x[3])/60 + #seconds to minutes
as.numeric(x[4])/60000)) #milliseconds to minutes
#[1] 0 0 1 3