>

단순한 무언가가 붙어 있습니다 : 예를 들어 myvec=c("10:56","2:32","0:00","0:00","62:59","60:40","46:23") 와 같은 분과 초의 벡터가 있습니다. . 여기 : 앞의 숫자  콜론 다음에 초가 있습니다.

내가 시도했다

difftime(myvec,format='%M:%S')
Error in difftime(myvec, format = "%M:%S") : 
  unused argument (format = "%M:%S")

그러나 내 문제는 몇 분 값이 60보다 크다는 것 같습니다. 나는 간단한 해결책을 생각할 수 없다는 것에 약간 놀랐습니다. 어쩌면 나는 difftime 를 오해했을 것입니다.  문서. 중복이 발생하면 죄송합니다.

수정 :

일부 사람들이 물어 본 이후 :

as.difftime(myvec,format='%M:%S',units='mins')
10.933333  2.533333  0.000000  0.000000        NA        NA 46.383333

두 NA 대신에 명령이 62.9999 60.6666 와 같은 것을 반환하기를 원합니다. . 이 시점에서 정규식을 사용하지 않고 솔루션이 있는지 궁금합니다.

  • 답변 # 1

    다음은 몇 가지 대안입니다. (2)를 제외하고는 패키지를 사용하지 않습니다.

    1) 하위숫자를 추출하고 숫자로 변환 한 후 초를 계산합니다.

    60 * as.numeric(sub(":.*", "", myvec)) + as.numeric(sub(".*:", "", myvec))
    ## [1]  656  152    0    0 3779 3640 2783
    
    

    2) 끈으로우리는 또한 strapply 를 사용할 수 있습니다  gsubfn에서 :

    library(gsubfn)
    strapply(myvec, "(.+):(.+)", ~ 60 * as.numeric(min) + as.numeric(sec), simplify = TRUE)
    ## [1]  656  152    0    0 3779 3640 2783
    
    

    3) 스캔다른 솔루션은 스캔 및 행렬 곱셈을 기반으로 할 수 있습니다 :

    c(c(60, 1) %*% matrix(scan(text = myvec, sep = ":", quiet = TRUE), 2))
    ## [1]  656  152    0    0 3779 3640 2783
    
    

    4) 평가 eval  평판이 좋지 않지만 사용에 신경 쓰지 않으면 여기에서 가장 짧은 솔루션입니다.

    sapply(parse(text = paste0("60*", sub(":", "+", myvec))), eval)
    ## [1]  656  152    0    0 3779 3640 2783
    
    

  • 이전 c# - IL2CPP를 사용하여 Visual Studio에서 Unity Hololens 디버깅?
  • 다음 vbnet에서 Python 스크립트 실행