동물원에서 월 및 연도 추출:: 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
자세한 내용은 후자에서 사용할 수 있는 자리 표시자 문자를 설명합니다.
윤활유 패키지는 다음과 같은 것에 매우 유용합니다.
> 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
벤치마크
길이가 1000인 연도별 개체에서 위의 솔루션은 연도별로 다른 솔루션보다 약 1000배, 월별로 200배 빠릅니다.
library(zoo)
library(microbenchmark)
library(lubridate)
ym <- as.yearmon(rep(2000, 1000))
microbenchmark(
as.integer(ym),
as.numeric(format(ym, "%y")),
as.POSIXlt(ym)$year + 1900,
year(ym)
)
Unit: microseconds
expr min lq mean median uq max neval cld
as.integer(ym) 18.2 27.90 28.93 29.15 31.15 51.2 100 a
as.numeric(format(ym, "%y")) 46515.8 47090.05 48122.28 47525.00 48080.25 69967.6 100 c
as.POSIXlt(ym)$year + 1900 40874.4 41223.65 41798.60 41747.30 42171.25 44381.2 100 b
year(ym) 40793.2 41167.70 42003.07 41742.40 42140.30 65203.3 100 b
microbenchmark(
cycle(ym),
as.numeric(format(ym, "%m")),
as.POSIXlt(ym)$mon + 1,
month(ym)
)
Unit: microseconds
expr min lq mean median uq max neval cld
cycle(ym) 138.1 166.0 173.893 172.95 181.45 344.0 100 a
as.numeric(format(ym, "%m")) 46637.1 46954.8 47632.307 47325.90 47672.40 67690.1 100 c
as.POSIXlt(ym)$mon + 1 40923.3 41339.1 41976.836 41689.95 42078.15 65786.4 100 b
month(ym) 41056.4 41408.9 42082.975 41743.35 42164.95 66651.0 100 b
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
언급URL : https://stackoverflow.com/questions/9749598/extract-month-and-year-from-a-zooyearmon-object
'programing' 카테고리의 다른 글
판다의 루프를 위한 것이 정말 나쁜가요?언제가 좋을까요? (0) | 2023.07.16 |
---|---|
Select * (all) 문에 행 ID 표시 (0) | 2023.07.06 |
순간 스크립트 모듈 시스템 입력이상하게 행동하는 JS (0) | 2023.07.06 |
Firebase용 Cloud Functions에 대한 시간 초과 설정이 콘솔에서 유지되지 않습니다. 버그입니까? (0) | 2023.07.06 |
샘플 함수를 사용하여 데이터를 교육/테스트 세트로 분할하는 방법 (0) | 2023.07.06 |