如何在R中将时间(mm:ss)转换为十进制形式

Joe*_*Joe 20 time r numeric

我使用RStudio将一个csv文件导入到R中,我试图用每场比赛的分数来计算每场比赛的得分.然而,每场比赛的分钟数格式为mm:ss,我很难找到如何将其转换为十进制形式.

请帮忙!

Jor*_*eys 25

鉴于您从字符向量开始,这相对容易:

minPerGame <- c("4:30","2:20","34:10")

sapply(strsplit(minPerGame,":"),
  function(x) {
    x <- as.numeric(x)
    x[1]+x[2]/60
    }
)
Run Code Online (Sandbox Code Playgroud)

[1]  4.500000  2.333333 34.166667
Run Code Online (Sandbox Code Playgroud)

确保检查了您使用read.csv()该选项as.is=TRUE.否则你将不得不转换使用as.character().


Rei*_*son 9

需要十进制吗?如果以正确的格式存储数据,例如作为类的对象,POSIXltR的日期时间类之一,R将以数字方式处理时间的正确处理.这是我的意思的一个例子:

首先,我们创建一些虚拟数据用于说明目的:

set.seed(1)
DF <- data.frame(Times = seq(as.POSIXlt("10:00", format = "%M:%S"), 
                             length = 100, by = 10),
                 Points = cumsum(rpois(100, lambda = 1)))
head(DF)
Run Code Online (Sandbox Code Playgroud)

忽略这里有日期的事实,当我们进行绘图时,它实际上被忽略,因为所有观察具有相同的日期部分.接下来我们使用R的公式接口绘制它:

plot(Points ~ Times, data = DF, type = "o")
Run Code Online (Sandbox Code Playgroud)

产生这个:

每场比赛的积分

  • 转换为as.numeric以计算平均游戏持续时间变得乏味,因为`POSIXt`类将31/12/1969 23:59:59视为零,但在转换时添加当前日期.所以一个天真的意思(as.numeric(Times))`今天会给出一个错误的结果,明天会有一个不同的错误结果...... (3认同)