2016-09-26 1 views
2

12/8/12과 같은 날짜의 문자열을 변환하는 중입니다. 1) 앞에 0 (제로 패딩)을 추가하고 월 번호를 입력 한 다음 내가 작성한 사용자 정의 함수에서 as.Date 함수를 사용하여 날짜 객체로 변환합니다. 내가 lapply를 사용할 때 다음에,이 캐릭터 라인 표현을 돌려줍니다R 날짜 시간 변환 - lapply 및 unlist가 신기원 이후 날로 변환 중임

> date_conversion(test[1]) 
[1] "2012-12-12" 
> typeof(date_conversion(test[1])) 
[1] "double" 

: 매우 혼란 무엇

date_conversion <- function(date_string){ 
    split <- unlist(strsplit(date_string, "/")) 
    split[1] = str_pad(split[1], 2, pad = "0") 
    split[2] = str_pad(split[1], 2, pad = "0") 
    t = as.Date(paste(split, collapse = "/"),format='%m/%d/%y') 
    return (t) 
} 

내가 하나 개의 입력에 함수를 호출 할 때 내가 원하는 내가 생각하는 결과를 다시 얻을 수 있다는 것입니다 : 나는 unlist를 호출 할 때

> lapply(test, date_conversion) 
[[1]] 
[1] "2012-12-12" 

[[2]] 
[1] "2015-12-12" 

[[3]] 
[1] "2015-09-09" 

그런 다음, 날짜는 시대 이후 일에 변경 :

,691,363 (210)
unlist(lapply(test, date_conversion)) 
[1] 15686 16781 16687 

나는 날짜의 기본 표현은 시대 이후 (따라서 typeof 반환 더블 일 것 같다,하지만 왜 목록 값은 날짜보다 사람이 읽을 수있는 형태로 포맷 후 unlist를 호출 보여 그들에게 돌아갈 만들 것 이 시대 양식 이후 요즘?

또한 내가 이와 같은 변환을 수행하는 우아한 방법이 있습니까? 아마 내가 라플을 사용해서는 안되는거야?

답변

3

:

test <- c("12/8/12", "1/1/13", "2/4/13") 

dates <- lubridate::mdy(test) 
##[1] "2012-12-08" "2013-01-01" "2013-02-04" 

class(dates) 
##Date[1:3], format: "2012-12-08" "2013-01-01" "2013-02-04" 

str(dates) 
##[1] "Date" 

lubridate 기능 mdy() 달 (m)로 개체 test에서 문자열 변환은 일 (D)와 세 (Y). 오브젝트 test이리스트 인 경우, aichao가 쓴 것과 같은 대답은 lubridate::mdy((unlist(test))으로 가능합니다.

1

as.Date은 날짜 문자열 형식으로 작동하므로 벡터화됩니다. date_conversion 함수가 필요하지 않습니다. 그래서, test 경우 문자열로 날짜의 벡터는 다음과 같습니다

test <- c("12/8/12", "1/1/13", "2/4/13") 
print(result) 
result <- as.Date(test, format="%m/%d/%y") 
##[1] "2012-12-08" "2013-01-01" "2013-02-04" 
str(result) 
##Date[1:3], format: "2012-12-08" "2013-01-01" "2013-02-04" 
class(result) 
##[1] "Date" 

경우 test 다음하는 list입니다 unlist 첫 번째 (즉, as.Date(unlist(test), format="%m/%d/%y")). lubridate 패키지와 다른 해결책이