R 阅读时间
我有一个CSV文件,其中包含铁人三项赛每个赛段每个参赛者的参赛次数。我在读取数据以便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
> 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)