[r] zoo :: yearmon 객체에서 월과 연도 추출

나는이 yearmon개체를 :

require(zoo)
date1 <- as.yearmon("Mar 2012", "%b %Y")
class(date1)
# [1] "yearmon"

여기에서 월과 연도를 어떻게 추출 할 수 있습니까?

month1 <- fn(date1)
year1 <- fn(date1)

대신 어떤 기능을 사용해야합니까? fn()



답변

format()클래스의 객체에 메서드를 사용합니다 "yearmon". 다음은 귀하의 예시 날짜입니다 (제대로 생성되었습니다!).

date1 <- as.yearmon("Mar 2012", "%b %Y")

그런 다음 필요에 따라 날짜 부분을 추출 할 수 있습니다.

> format(date1, "%b") ## Month, char, abbreviated
[1] "Mar"
> format(date1, "%Y") ## Year with century
[1] "2012"
> format(date1, "%m") ## numeric month
[1] "03"

이들은 문자로 반환됩니다. 적절한 as.numeric()경우 연도 또는 숫자 월을 숫자 변수로 원하면 줄 바꿈하십시오.

> as.numeric(format(date1, "%m"))
[1] 3
> as.numeric(format(date1, "%Y"))
[1] 2012

자세한 내용은 ?yearmon?strftime참조-후자는 사용할 수있는 자리 표시 자 문자를 설명합니다.


답변

lubridate 패키지는 이런 종류의 일은 놀랍습니다 :

> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012


답변

OP가 zoo여기에서 사용하고 있음을 알고 있지만 ts동일한 문제에 대한 표준 솔루션을 검색하는 스레드를 발견했습니다 . 그래서 나는 zoo무료 답변을 추가 할 것이라고 생각했습니다 ts.

# create an example Date 
date_1 <- as.Date("1990-01-01")
# extract year
as.numeric(format(date_1, "%Y"))
# extract month
as.numeric(format(date_1, "%m"))


답변

다음을 사용할 수 있습니다 format.

library(zoo)
x <- as.yearmon(Sys.time())
format(x,"%b")
[1] "Mar"
format(x,"%Y")
[1] "2012"


답변

큰 벡터의 경우 :

y = as.POSIXlt(date1)$year + 1900    # x$year : years since 1900
m = as.POSIXlt(date1)$mon + 1        # x$mon : 0–11


답변

질문은 예상되는 출력을 정확하게 나타내지 않았지만 월에는 월 번호 (1 월 = 1)를 원하고 연도에는 숫자 4 자리 연도를 원한다고 가정 한 다음 질문의 코드를 방금 실행했다고 가정합니다.

cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012


답변

1800 년부터 지금까지 데이터에 비슷한 문제가 있었기 때문에 이것은 저에게 효과적이었습니다.

data2$date=as.character(data2$date)
lct <- Sys.getlocale("LC_TIME");
Sys.setlocale("LC_TIME","C")
data2$date<- as.Date(data2$date, format = "%Y %m %d") # and it works