将R中的数字更改为秒

将R中的数字更改为秒,r,time,R,Time,我有这样的数字:303821802120等等,它们真正的意思是3038=3分3秒8分。在本专栏中,我有超过10万条观察结果。 我想要的只是几秒钟: 183.8秒 我应该使用lubridate吗?如何使用?您可以试试 num <- c(3038, 2180, 2120) m <- regmatches(num, regexec("(\\d)(\\d{2})(\\d)", as.character(num))) sapply(m, function(x) { x <- as.

我有这样的数字:303821802120等等,它们真正的意思是3038=3分3秒8分。在本专栏中,我有超过10万条观察结果。 我想要的只是几秒钟: 183.8秒

我应该使用lubridate吗?如何使用?

您可以试试

num <- c(3038, 2180, 2120)
m <- regmatches(num, regexec("(\\d)(\\d{2})(\\d)", as.character(num)))
sapply(m, function(x) { 
  x <- as.integer(x) * c(0, 60, 1, 1/10)
  return(sum(x))
})
# [1] 183.8 138.0 132.0
num您可以试试

num <- c(3038, 2180, 2120)
m <- regmatches(num, regexec("(\\d)(\\d{2})(\\d)", as.character(num)))
sapply(m, function(x) { 
  x <- as.integer(x) * c(0, 60, 1, 1/10)
  return(sum(x))
})
# [1] 183.8 138.0 132.0

num我们可以使用
substr

as.numeric(substr(t1,1,1))*60 + 
      as.numeric(substr(t1,2,3)) + 
      as.numeric(substr(t1,4,4))/10
#[1] 183.8 138.00 132.00   NA
或使用
strsplit

i1 <- t1!=0
t1[i1] <- t(sapply(strsplit(gsub('(.)(..)(.)', '\\1,\\2,\\3', t1[i1]),
         ','), as.numeric)) %*% c(60, 1, 1/10)
t1
#[1] 183.8 138.0 132.0   0.0

i1我们可以使用
substr

as.numeric(substr(t1,1,1))*60 + 
      as.numeric(substr(t1,2,3)) + 
      as.numeric(substr(t1,4,4))/10
#[1] 183.8 138.00 132.00   NA
或使用
strsplit

i1 <- t1!=0
t1[i1] <- t(sapply(strsplit(gsub('(.)(..)(.)', '\\1,\\2,\\3', t1[i1]),
         ','), as.numeric)) %*% c(60, 1, 1/10)
t1
#[1] 183.8 138.0 132.0   0.0

i1我更喜欢用数学运算来转换数字。也许这有助于:

onlysecs <- function(x) (x/1000-floor(x/1000))*100
minsecs <- function(x) floor(x/1000)*60
onlysecs(x) + minsecs(x)
#[1] 183.8 138.0 132.0

onlysecs我更喜欢用数学运算来转换数字。也许这有助于:

onlysecs <- function(x) (x/1000-floor(x/1000))*100
minsecs <- function(x) floor(x/1000)*60
onlysecs(x) + minsecs(x)
#[1] 183.8 138.0 132.0
onlysecs我的简单解决方案:

n<-c(3038, 2180, 2120) 
minute<-as.integer(n/1000)*60
lastdigit<-n%%10/10
mid<-as.integer(substr(as.character(n),2,3))
sum<-minute+lastdigit+mid
sum 

[1] 183.8 138.0 132.0
n我的简单解决方案:

n<-c(3038, 2180, 2120) 
minute<-as.integer(n/1000)*60
lastdigit<-n%%10/10
mid<-as.integer(substr(as.character(n),2,3))
sum<-minute+lastdigit+mid
sum 

[1] 183.8 138.0 132.0

你是说183.8(十分之八)还是183.08(八百)?是的,对不起,我的意思是十分之183.8。你是说183.8(十分之八)还是183.08(八百)?是的,对不起,我的意思是十分之183.8。谢谢你,但我不想提及我有大约118000次观察;)在我的第一个解决方案中,当某些值为0…@Cham时,0元素将给出NA,在第二个解决方案中,我们可能需要排除这些0元素。谢谢,但我不想提及我有大约118000个观察结果;)在我的第一个解决方案中,当某些值为0…@Cham时,0个元素将给出NA,而在第二个解决方案中,我们可能需要排除这些0个元素。很好的解决方案,我将两者都放在一个函数中,即
f谢谢,但我如何将其应用于具有118000个观察值的列?:)是的,当然-这可以转换为一个班轮。有时我发现分离函数更清晰。@Cham,不要在函数定义中使用
Pop1$Race.time
。相反,请使用任何变量,如“x”,键入
f WOHO,我成功地获得了一个包含这些数字的新列=D谢谢大家!很好的解决方案,我只是将两者都放在一个函数中,即
f谢谢,但我如何将其应用到包含118000个观察值的列中呢?:)是的,当然-这可以转换为一个班轮。有时我发现分离函数更清晰。@Cham,不要在函数定义中使用
Pop1$Race.time
。相反,请使用任何变量,如“x”,键入
f WOHO,我成功地获得了一个包含这些数字的新列=D谢谢大家!