문자 벡터를 POSIXct / POSIXlt로 변환하기위한 as.POSIXct / as.POSIXlt와 strptime의 차이점


94

여기서 문자 벡터를 datetime 클래스로 변환하는 방법에 대해 묻는 여러 질문을 따랐습니다. 나는 종종 strptime과 as.POSIXct / as.POSIXlt 메소드의 두 가지 메소드를 봅니다. 두 가지 기능을 살펴 보았지만 차이점이 무엇인지 명확하지 않습니다.

strptime

function (x, format, tz = "") 
{
    y <- .Internal(strptime(as.character(x), format, tz))
    names(y$year) <- names(x)
    y
}
<bytecode: 0x045fcea8>
<environment: namespace:base>

as.POSIXct

function (x, tz = "", ...) 
UseMethod("as.POSIXct")
<bytecode: 0x069efeb8>
<environment: namespace:base>

as.POSIXlt

function (x, tz = "", ...) 
UseMethod("as.POSIXlt")
<bytecode: 0x03ac029c>
<environment: namespace:base>

성능 차이가 있는지 확인하기 위해 마이크로 벤치 마크 수행 :

library(microbenchmark)
Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d-%m-%Y')), 5000, replace = TRUE)
df <- microbenchmark(strptime(Dates, "%d-%m-%Y"), as.POSIXlt(Dates, format = "%d-%m-%Y"), times = 1000)

Unit: milliseconds
                                    expr      min       lq   median       uq      max
1 as.POSIXlt(Dates, format = "%d-%m-%Y") 32.38596 33.81324 34.78487 35.52183 61.80171
2            strptime(Dates, "%d-%m-%Y") 31.73224 33.22964 34.20407 34.88167 52.12422

strptime은 약간 더 빠릅니다. 그래서 무엇을 제공합니까? 왜 2 개의 유사한 기능이 있거나 내가 놓친 기능간에 차이점이 있습니까?


4
호출 할 때 as.POSIXctas.POSIXlt문자형 벡터에서 호출되는 코드를 확인하려면 각각 as.POSIXct.defaultas.POSIXlt.character을 확인하십시오.
Joshua Ulrich는

답변:


154

음, 함수는 다른 일을합니다.

첫째, 날짜 / 시간의 두 가지 내부 구현이 있습니다. POSIXct는 UNIX 시대 이후 초 (+ 일부 다른 데이터) POSIXlt를 저장하는이고 일, 월, 년,시, 분, 초 등의 목록을 저장하는.

strptime다양한 형식의 문자형 벡터를 형식으로 직접 변환하는 함수 POSIXlt입니다.

as.POSIXlt다양한 데이터 유형을 POSIXlt. 그것은 지능적이고 현명한 일을하려고 노력합니다. 캐릭터의 경우 strptime.

as.POSIXct다양한 데이터 유형을 POSIXct. 또한 지적하고 분별있는 일을하려고 - 문자의 경우는 실행 strptime후, 처음부터 변환을 수행 POSIXlt하는 POSIXct.

그것은 의미하게 strptime때문에, 빠른을 strptime다른 사람이 입력 유형에서 사용할 방법을 결정하기 위해 시도하는 동안 만 문자 입력을 처리합니다. 또한 예기치 않은 데이터가 전달되면 원하는 것이 아닌 지능적인 작업을 시도하는 대신 오류가 발생할 수 있다는 점에서 조금 더 안전해야합니다.


좋은 대답입니다. 모델링 또는 데이터 시각화 목적으로 데이터를 컴파일하는 모범 사례에 대한 합의가 있습니까?

22

POSIXt 유형에는 POSIXct와 POSIXlt의 두 가지가 있습니다. "ct"는 달력 시간을 의미 할 수 있으며 원점 이후의 초 수를 저장합니다. "lt"또는 현지 시간은 날짜를 시간 속성 목록 (예 : "시간"및 "월")으로 유지합니다. 다음 예제를 시도하십시오.

date.hour=strptime("2011-03-27 01:30:00", "%Y-%m-%d %H:%M:%S")

date=c("26/10/2016")

time=c("19:51:30")

day<-paste(date,"T", time)

day.time1=as.POSIXct(day,format="%d/%m/%Y T %H:%M:%S",tz="Europe/Paris")

day.time1

day.time1$year

day.time2=as.POSIXlt(day,format="%d/%m/%Y T %H:%M:%S",tz="Europe/Paris")

day.time2

day.time2$year
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.