R 阅读时间

R 阅读时间,r,statistics,R,Statistics,我有一个CSV文件,其中包含铁人三项赛每个赛段每个参赛者的参赛次数。我在读取数据以便R可以使用它时遇到问题。以下是数据外观的示例(为了清晰起见,我删除了一些列): 我第一次天真地尝试绘制数据是这样的 > tri <- read.csv(file.choose(), header=TRUE, as.is=TRUE) > pairs(~ Bike + Run + Swim, data=tri) 这将转换一小时以下的所有时间,但对于一小时以上的任何时间,小时将被解释为分钟。将“%H

我有一个CSV文件,其中包含铁人三项赛每个赛段每个参赛者的参赛次数。我在读取数据以便R可以使用它时遇到问题。以下是数据外观的示例(为了清晰起见,我删除了一些列):

我第一次天真地尝试绘制数据是这样的

> tri <- read.csv(file.choose(), header=TRUE, as.is=TRUE)
> pairs(~ Bike + Run + Swim, data=tri)
这将转换一小时以下的所有时间,但对于一小时以上的任何时间,小时将被解释为分钟。将“%H:%M:%S”替换为“%M:%S”会在一小时内解析多次,但会生成NA。转换这两种时间类型的最佳方法是什么

编辑:根据要求添加一个简单的示例

> times <- c("27:07", "1:02:12", "DNF")
> as.numeric(as.difftime(times, format="%M:%S"), units="secs")
[1] 1627   62   NA
> as.numeric(as.difftime(times, format="%H:%M:%S"), units="secs")
[1]   NA 3732   NA
>倍为.numeric(倍为.difftime(倍,格式=“%M:%S”),单位=“秒”)
[1] 1627 62 NA
>as.numeric(as.difftime(times,format=“%H:%M:%S”),units=“secs”)
[1] NA 3732 NA

我想要的输出是
16273732na

这里有一个快速的解决方案,尽管可能有更好的解决方案:

cdifftime <- function(x) {
   x2 <- gsub("^([0-9]+:[0-9]+)$","00:\\1",x)  ## prepend 00: to %M:%S elements
   res <- as.difftime(x2,format="%H:%M:%S")  
   units(res) <- "secs"
   as.numeric(res)
}
times <- c("27:07", "1:02:12", "DNF")
cdifftime(times)
## [1] 1627 3732   NA

cdifftime这里有一个快速解决方案,尽管可能有更好的解决方案:

cdifftime <- function(x) {
   x2 <- gsub("^([0-9]+:[0-9]+)$","00:\\1",x)  ## prepend 00: to %M:%S elements
   res <- as.difftime(x2,format="%H:%M:%S")  
   units(res) <- "secs"
   as.numeric(res)
}
times <- c("27:07", "1:02:12", "DNF")
cdifftime(times)
## [1] 1627 3732   NA

cdifftime请创建一个可复制的示例,最好是一个单字符向量,其中包含您描述的格式中的一些时间。好主意,添加了一个简单的示例。请创建一个可复制的示例,最好是一个单字符向量,其中包含您描述的格式中的一些时间。好主意,添加了一个简单的示例。是,当我读取数据时,我使用read.csv和as.is=TRUE。谢谢您的快速回答。是的,当我读取数据时,我使用read.csv和as.is=TRUE。谢谢你的快速回答。
cdifftime <- function(x) {
   x2 <- gsub("^([0-9]+:[0-9]+)$","00:\\1",x)  ## prepend 00: to %M:%S elements
   res <- as.difftime(x2,format="%H:%M:%S")  
   units(res) <- "secs"
   as.numeric(res)
}
times <- c("27:07", "1:02:12", "DNF")
cdifftime(times)
## [1] 1627 3732   NA
tri[4:9] <- lapply(tri[4:9],cdifftime)