2017-10-06 1 views
0

데이터 프레임을 날짜 열에 정렬하고 싶습니다. 내 예를 들어 dataframe :R 및 dplyr로 날짜를 정렬하거나 정렬하는 방법

library(tidyverse)  

dates <- tibble(date = c("01-01-2017", "02-03-2017", "01-02-2017", "02-01-2017", "01-03-2017"), 
        value = c(8, 12, 4, 14, 11)) 

는 그래서 일에 있기 때문에 단지 종류 작동하지 않습니다 다음과 같습니다.

arrange(dates, date) 
+0

'lubridate' 패키지의'as.Date()'또는'dmy()'를 사용하여 실제 날짜 형식으로 변환하십시오. 날짜를 문자열로 저장하면 사전 순으로 정렬됩니다. –

+0

날짜 벡터를'dat <- as.Date (dat $ date, "% m- % d- % Y")'와 같은 Date 클래스로 변환해야합니다. 여기서 dat은 당신의 tibbly의 이름입니다. – lmo

답변

1

귀하의 코멘트, 날짜 데이터 유형을 기반으로 여기에 문제가 있습니다 : 귀하의 질문에서 당신의 날짜 문자열이 있는지 여부 일 - 월 - 년 (format = "%d-%m-%Y") 또는 월 - 일 - 년 (format = "%m-%d-%Y") 명확하지 않다 날짜, 문자 등의 문자열을 저장하지 말아야합니다.

정보를 출력하도록 선택하면 서식을 지정하여 사람들에게 잘 보이게 할 수 있습니다 .

첫 번째 예제는 날짜를 실제 날짜로 만들고,이 열을 기준으로 필터링/정렬 할 수 있으며, 두 번째는 정렬 만하고 다른 작업을 수행하려면 다시 변환해야합니다.

옵션 1 (좋은) :

dates_mos <- dates %>% 
    mutate(date = as.Date(date, "%d-%m-%Y")) %>% 
    arrange(date) 

출력 1 :

 date value 
     <date> <dbl> 
1 2017-01-01  8 
2 2017-01-02 14 
3 2017-02-01  4 
4 2017-03-01 11 
5 2017-03-02 12 

옵션 2 (좋지 않음) :

dates_mos <- dates %>% 
    arrange(date = as.Date(date, "%d-%m-%Y")) 

출력 2 :

 date value 
     <chr> <dbl> 
1 01-01-2017  8 
2 02-01-2017 14 
3 01-02-2017  4 
4 01-03-2017 11 
5 02-03-2017 12 
+0

형식은 % d- % m- % Y 여야하지만 데이터는이 % Y를 제공해야합니다 - 결과로 % m- % d. 이 날짜를 $ date <- format (date.Date (dates $ date, format = "% Y- % m- % d"), "% d- % m- % Y")와 같이 형식화하면 둘 중 하나가 작동하고 클래스가 다시 문자로 전환됩니다 ... – Tdebeus

+0

@Tdebeus 당신은 날짜의 텍스트 표현과 날짜 데이터 유형을 혼동하고 있습니다. 첫 번째는 인간과 같이 날짜를 보는 문자열, 두 번째는 컴퓨터에서 읽을 수있는 날짜입니다. 후자를 필터링하거나 정렬 할 수 있습니다. – User632716

+1

아주 좋은 편집 감사합니다! – Tdebeus

2

질문에 데이터를 저장 한 방법은 날짜별로 정렬하는 데 적합하지 않습니다. R이 날짜로 인식되도록하려면 일반 문자열로 저장됩니다.

날짜 문자열의 특정 형식을 포함하여 as.Date()으로 수행하십시오.

dates$date <- as.Date(dates$date, format="%d-%m-%Y") 
arrange(dates, date) 
# 1 2017-01-01  8 
# 2 2017-01-02 14 
# 3 2017-02-01  4 
# 4 2017-03-01 11 
# 5 2017-03-02 12 
+0

형식은'% d- % m- % Y'이어야하지만 그 결과 데이터는이'% Y- % m- % d'를 제공합니다. format '(date $ date, format = "% Y- % m- % d"), "% d- % m- % Y"와 같이'date $ date < 둘 중 하나라도 작동하지 않고 클래스가 문자로 다시 전환됩니다 ... – Tdebeus

+0

'as.Date()'이후에 기계가 해석하는 형식이 원하는 형식입니다. 그러나 표준 날짜 형식이있는 보고서를 준비해야하는 경우가 아니면 * 보려는 * 것은 무의미합니다. 보고서의 경우, 당신은 당신의 코멘트에 언급 된'format()'을 사용하여 날짜 형식의 데이터를 문자열로 변환 할 수 있습니다. –

관련 문제