我有一组F1单圈时间,分钟和秒。秒数有十分之一秒,数十万分之一秒,我需要保持这种方式,因为我试图绘制这些数据,但R将其作为一个因素。我试图将其转换为数字(as.numeric),但似乎不起作用。 这是一个数据样本:
DriverId Q1 Q2 Q3
1 1:05.585 1:04.772 1:04.293
20 1:04.655 1:07.354 1:04.123
如果格式不正确, ggplot
不会让我正确绘制数据图表。
我尝试使用chron
和POSIXlt
软件包但没有用,因为它们似乎不支持mm:ss.000
格式
请帮助!
答案 0 :(得分:4)
您可以使用strptime
,其中%OS
代表秒数及其小数部分。例如:
x<-as.factor(c("1:04.293",'1:04.772','1:04.890'))
options(digits.secs=3)
x<- strptime(x, "%M:%OS")
输出:
"2018-01-13 00:01:04.293 CET" "2018-01-13 00:01:04.772 CET" "2018-01-13 00:01:04.890 CET"
仅返回分钟和秒(作为字符),例如绘图中的刻度标签:
format(x,"%M:%OS3")
[1] "01:04.293" "01:04.772" "01:04.890"
这是一个绘图的例子:
plot(x,c(1,2,3),xaxt='n')
at <- axTicks(1)
axis(1, at=at, labels=format(as.POSIXct(at,origin='1970-1-1'),"%M:%OS3"), las=1)
输出:
希望这有帮助!
答案 1 :(得分:1)
我们可以使用times
times
创建chron
类对象
library(chron)
library(tidyr)
library(dplyr)
gather(df1, key, val, -DriverId) %>%
mutate(val = chron::times(paste0("00:", val)))
在上面,我们将其转换为“长”格式。如果我们不需要重塑,那么
df1 %>%
mutate_at(vars(-DriverId), funs(chron::times(paste0("00:", .))))
# DriverId Q1 Q2 Q3
#1 1 00:01:06 00:01:05 00:01:04
#2 20 00:01:05 00:01:07 00:01:04