연도 및 월("yyyy-mm" 형식)을 날짜로 변환하시겠습니까?
다음과 같은 데이터 세트가 있습니다.
Month count
2009-01 12
2009-02 310
2009-03 2379
2009-04 234
2009-05 14
2009-08 1
2009-09 34
2009-10 2386
데이터(월은 x 값이고 카운트는 y 값)를 표시하려고 합니다.데이터에 공백이 있기 때문에 해당 달 정보를 날짜로 변환하고 싶습니다.노력했습니다.
as.Date("2009-03", "%Y-%m")
하지만 그것은 효과가 없었습니다.왜 그래요?는 것 같습니다.as.Date()
또한 하루가 필요한데 하루의 표준 값을 설정할 수 없습니까?문제를 해결하는 기능은 무엇입니까?
날짜는 숫자 값과 시작 날짜에 해당하므로 실제로 날짜가 필요합니다.데이터를 날짜 형식으로 지정해야 하는 경우 다음 날짜에 붙여 수동으로 날짜를 매월 1일로 수정할 수 있습니다.
month <- "2009-03"
as.Date(paste(month, "-01", sep=""))
이거 먹어봐요.(여기서 사용)text=Lines
예제 자체를 포함하도록 유지하지만 실제로는 파일 이름으로 대체할 것입니다.
Lines <- "2009-01 12
2009-02 310
2009-03 2379
2009-04 234
2009-05 14
2009-08 1
2009-09 34
2009-10 2386"
library(zoo)
z <- read.zoo(text = Lines, FUN = as.yearmon)
plot(z)
은 이 가 더 이 데 그 가 예 리 쁘 않 데더 가 터 있 있 X수 코 사 다 니 습 도 용 를 드 할 고 축 X표 에 섹 예 의 급 된 시 에 션 수 은 제 괜 많 이 터 고 도 지 면 는 찮 으 이 실 지 을 만 제 로 ▁for ▁section ▁code ▁of ▁the ▁x ▁axis?plot.zoo
.
시리즈, 동원리즈시물,,즈,z
은 위에생된것은이 ."yearmon"
다음과 같이 표시됩니다.
> z
Jan 2009 Feb 2009 Mar 2009 Apr 2009 May 2009 Aug 2009 Sep 2009 Oct 2009
12 310 2379 234 14 1 34 2386
"yearmon"
단독으로도 사용할 수 있습니다.
> as.yearmon("2000-03")
[1] "Mar 2000"
참고:
"yearmon"
클래스 오브젝트는 일정관리 순서로 정렬됩니다.수각의 일 하지 않은 의합니다. 그러나 각 월의 일 수에 비례하여 간격이 일정하지 않은 간격으로 포인트를 표시하는 것이 필요한 경우, 다음의 인덱스를 변환합니다.
z
"Date"
클스래:time(z) <- as.Date(time(z))
.
날짜 형식이 필요한 경우 가장 간단한 해결 방법:
library(zoo)
month <- "2000-03"
as.Date(as.yearmon(month))
[1] "2000-03-01"
as.Date
매월 첫째 날을 yearmon 개체로 고정합니다.
또한 다음을 통해 이를 달성할 수 있습니다.parse_date_time
또는fast_strptime
의 lubridate
package:
> parse_date_time(dates1, "ym")
[1] "2009-01-01 UTC" "2009-02-01 UTC" "2009-03-01 UTC"
> fast_strptime(dates1, "%Y-%m")
[1] "2009-01-01 UTC" "2009-02-01 UTC" "2009-03-01 UTC"
그 둘의 차이점은parse_date_time
윤활유 스타일 형식 지정을 허용하는 반면fast_strptime
에는 와동한형사필요니다합양과 동일한 합니다.strptime
.
는 표시간를지다사수있다습니용할음을을 할 수 .tz
parameter는 다음과 같습니다.
> parse_date_time(dates1, "ym", tz = "CET")
[1] "2009-01-01 CET" "2009-02-01 CET" "2009-03-01 CET"
데이터에 이 있을 는 "-" - " 시에이불성있규경는수사다습있용짜를 할 수 .truncated
는 몇 -parameter는 다음과 같습니다.
> parse_date_time(dates2, "ymdHMS", truncated = 3)
[1] "2012-06-01 12:23:00 UTC" "2012-06-01 12:00:00 UTC" "2012-06-01 00:00:00 UTC"
사용된 데이터:
dates1 <- c("2009-01","2009-02","2009-03")
dates2 <- c("2012-06-01 12:23","2012-06-01 12",'2012-06-01")
언제든지 패키지 사용:
library(anytime)
anydate("2009-01")
# [1] "2009-01-01"
실제로 위에서 언급한 바와 같이 (SO의 다른 곳에서도) 문자열을 날짜로 변환하려면 특정 월 날짜가 필요합니다.as.Date()
수동 페이지:
날짜 문자열이 날짜를 완전히 지정하지 않은 경우 반환되는 응답은 시스템별일 수 있습니다.가장 일반적인 동작은 누락된 연도, 월 또는 일을 현재의 것으로 가정하는 것입니다.날짜를 잘못 지정하면 신뢰할 수 있는 구현에서 오류가 발생하고 날짜가 NA로 보고됩니다.도 몇 구현(예: 안깝게몇예일구현인적반가지도타예()은 다음과 같습니다.
glibc
할 수 의미를 합니다.)는 신뢰할 수 없으며 의도된 의미를 추측합니다.
를 붙여넣는 것입니다."01"
각날짜및사지까용을 합니다.strptime()
그것을 그 달의 첫날로 표시하기 위해.
R: 처리 날짜 및 시간에 대한 배경 정보를 좀 더 알고자 하는 사용자:
은 R 서 시사용을 합니다.POSIXct
그리고.POSIXlt
클래스 및 날짜는 다음을 사용합니다.Date
학생들
날짜는 1970년 1월 1일 이후의 일 수로 저장되고 시간은 1970년 1월 1일 이후의 초 수로 저장됩니다.
예를 들어, 다음과 같습니다.
d <- as.Date("1971-01-01")
unclass(d) # one year after 1970-01-01
# [1] 365
pct <- Sys.time() # in POSIXct
unclass(pct) # number of seconds since 1970-01-01
# [1] 1450276559
plt <- as.POSIXlt(pct)
up <- unclass(plt) # up is now a list containing the components of time
names(up)
# [1] "sec" "min" "hour" "mday" "mon" "year" "wday" "yday" "isdst" "zone"
# [11] "gmtoff"
up$hour
# [1] 9
날짜 및 시간에 대한 작업 수행하기
plt - as.POSIXlt(d)
# Time difference of 16420.61 days
날짜를 처리하려면 다음을 사용할 수 있습니다.strptime()
(매뉴얼 페이지에서 다음 예를 참조하십시오.)
strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS")
# [1] "2006-02-20 11:16:16 EST"
# And in vectorized form:
dates <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
strptime(dates, "%d%b%Y")
# [1] "1960-01-01 EST" "1960-01-02 EST" "1960-03-31 EST" "1960-07-30 EDT"
저는 @ben-rollert의 솔루션이 좋은 해결책이라고 생각합니다.
이 솔루션을 새 패키지 내의 기능에 사용하려면 주의해야 합니다.
패키지를 개발할 때는 구문을 사용하는 것이 좋습니다.packagename::function_name()
(http://kbroman.org/pkg_primer/pages/depends.html) 참조).
▁▁version합▁the다니▁in▁use의 버전을 사용해야 합니다.as.Date()
에의정된으로 zoo
도서관.
다음은 예입니다.
> devtools::session_info()
Session info ----------------------------------------------------------------------------------------------------------------------------------------------------
setting value
version R version 3.3.1 (2016-06-21)
system x86_64, linux-gnu
ui RStudio (1.0.35)
language (EN)
collate C
tz <NA>
date 2016-11-09
Packages --------------------------------------------------------------------------------------------------------------------------------------------------------
package * version date source
devtools 1.12.0 2016-06-24 CRAN (R 3.3.1)
digest 0.6.10 2016-08-02 CRAN (R 3.2.3)
memoise 1.0.0 2016-01-29 CRAN (R 3.2.3)
withr 1.0.2 2016-06-20 CRAN (R 3.2.3)
> as.Date(zoo::as.yearmon("1989-10", "%Y-%m"))
Error in as.Date.default(zoo::as.yearmon("1989-10", "%Y-%m")) :
do not know how to convert 'zoo::as.yearmon("1989-10", "%Y-%m")' to class “Date”
> zoo::as.Date(zoo::as.yearmon("1989-10", "%Y-%m"))
[1] "1989-10-01"
따라서 패키지를 개발하는 경우 다음을 사용하는 것이 좋습니다.
zoo::as.Date(zoo::as.yearmon("1989-10", "%Y-%m"))
tidyverse
최근에 패키지를 추가했습니다.lubridate
이를 위한 몇 가지 기능이 있습니다.
library(clock)
x <- year_month_day_parse(df$Month, format = "%Y-%m", precision = "month")
# <year_month_day<month>[8]>
# [1] "2009-01" "2009-02" "2009-03" "2009-04" "2009-05" "2009-08" "2009-09" "2009-10"
날짜 조작 및 추출
이 출력은 연도-월-일 벡터로, 날짜 산술을 계속 수행하고 다른 일반 함수를 예상대로 적용할 수 있습니다.
sort(x, decreasing = T)
# <year_month_day<month>[8]>
# [1] "2009-10" "2009-09" "2009-08" "2009-05" "2009-04" "2009-03" "2009-02" "2009-01"
add_months(x, 3)
# <year_month_day<month>[8]>
# [1] "2009-04" "2009-05" "2009-06" "2009-07" "2009-08" "2009-11" "2009-12" "2010-01"
add_years(x, -2)
# <year_month_day<month>[8]>
# [1] "2007-01" "2007-02" "2007-03" "2007-04" "2007-05" "2007-08" "2007-09" "2007-10"
get_month(x)
# [1] 1 2 3 4 5 8 9 10
경우 날짜를 설정할 수도 .set_day
:
set_day(x, 1)
<year_month_day<day>[8]>
[1] "2009-01-01" "2009-02-01" "2009-03-01" "2009-04-01" "2009-05-01" "2009-08-01"
[7] "2009-09-01" "2009-10-01"
잘못된 날짜 처리
이 얻고자 , ,▁the▁or했면다,▁with▁the▁month▁of얻▁you,invalid_*
일련의 기능은 다음과 같은 이점을 제공합니다.
# not 31 days in Feb, Apr, Sep
y <- set_day(x, 31)
# <year_month_day<day>[8]>
# [1] "2009-01-31" "2009-02-31" "2009-03-31" "2009-04-31" "2009-05-31" "2009-08-31"
# [7] "2009-09-31" "2009-10-31"
invalid_any(y)
[1] TRUE
invalid_detect(y)
[1] FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE
하지 않은 날짜는 못된날 수있습으로 할 수 .invalid_resolve
을 는또드사수있습다니할용과 함께 할 수 .invalid_remove
:
invalid_resolve(y, invalid = "previous")
<year_month_day<day>[8]>
[1] "2009-01-31" "2009-02-28" "2009-03-31" "2009-04-30" "2009-05-31" "2009-08-31"
[7] "2009-09-30" "2009-10-31"
값을 지정할 수 있습니다.invalid
잘못된 날짜를 처리하기 위한 인수:
"이전":이전의 유효한 시간 인스턴스입니다.
"전일":하루 중 시간을 유지하는 시간으로 유효한 전날입니다.
"next": 유효한 다음 순간입니다.
"다음 날":시간이 지정된 다음 유효한 날짜로, 시간을 유지합니다.
"수정":입력이 유효하지 않은 일 수만큼 오버플로가 발생합니다.시간이 삭제됩니다.
"예약일":입력이 유효하지 않은 일 수만큼 오버플로가 발생합니다.시간이 유지됩니다.
"NA": 잘못된 날짜를 NA로 대체합니다.
"error": 잘못된 날짜에 오류가 발생했습니다.
사용방을 사용하는 ym
lubridate
.
월은 숫자, 약어 월 또는 다양한 구분 기호(예: 구분 기호가 없는 경우에도)가 있는 전체 월 이름일 수 있습니다.
library(lubridate)
ym(c("2012/September", "2012-Aug", "2012.07", 201204))
[1] "2012-09-01" "2012-08-01" "2012-07-01" "2012-04-01"
주어진 데이터에서:
ym(dat$Month)
[1] "2009-01-01" "2009-02-01" "2009-03-01" "2009-04-01" "2009-05-01"
[6] "2009-08-01" "2009-09-01" "2009-10-01"
참고로 다음과 같은 기능도 있습니다.my
만약 당신이 그것을 반대로 가지고 있다면, 예를 들어.Sep/2022
.
데이터.
dat <- structure(list(Month = c("2009-01", "2009-02", "2009-03", "2009-04",
"2009-05", "2009-08", "2009-09", "2009-10"), count = c(12L, 310L,
2379L, 234L, 14L, 1L, 34L, 2386L)), class = "data.frame", row.names = c(NA,
-8L))
언급URL : https://stackoverflow.com/questions/6242955/converting-year-and-month-yyyy-mm-format-to-a-date
'sourcetip' 카테고리의 다른 글
vba: 함수에서 사전 반환 (0) | 2023.06.07 |
---|---|
사용자가 저장 버튼을 누르기 전에 상태를 업데이트해야 합니까? (0) | 2023.06.07 |
ASCII가 아닌 UTF-8 문자가 포함된 행을 찾기 위해 테이블을 쿼리할 수 있습니까? (0) | 2023.06.07 |
가상 환경에 해당하는 루비? (0) | 2023.06.02 |
WPF에서 타이머를 만들려면 어떻게 해야 합니까? (0) | 2023.06.02 |