Сортировка даты в формате м / у в кадре данных в R
Я пытаюсь отсортировать столбец даты в формате M/Y. Я пытался использовать несколько способов, указанных в других сообщениях, но ни один не помог. Пожалуйста, предложите. В 2012 году он отображается правильно со всеми месяцами, указанными в 2012 году, но затем он меняет структуру. Спасибо.
3 ответа
Это должно работать:
#let's add a column to your data.frame with a proper date
df$date_of_first_day <- as.Date(paste0("1/",monyear),format = "%d/%m/%y")
# then sort the data.frame
df <- df[order(df$date_of_first_day,decreasing = FALSE),]
# then get rid of this column
df$date_of_first_day <- NULL
С помощью lubridate
а также dplyr
:
library(dplyr)
library(lubridate)
df <- data.frame( monyear = c( "1/12", "10/13", "1/13", "2/10" ),
amount = 1:4,
prices = 1:4 )
Исходные данные:
monyear amount prices
1 1/12 1 1
2 10/13 2 2
3 1/13 3 3
4 2/10 4 4
Сортировать по дате:
df <- df %>%
arrange( parse_date_time(monyear,"my") )
Функция parse_date_time
будет читать формат как "мой" или "месяц года"
Выход:
monyear amount prices
1 2/10 4 4
2 1/12 1 1
3 1/13 3 3
4 10/13 2 2
1) Это преобразует DF (см. Примечание) в временной ряд зоопарка, первый столбец которого относится к классу yearmon и который сортируется по нему.
library(zoo)
z <- read.zoo(DF, FUN = as.yearmon, format = "%m/%y")
Вы можете сохранить его как объект зоопарка, как указано выше, или преобразовать его обратно во фрейм данных:
fortify.zoo(z)
2) Это альтернатива read.zoo. Он также использует класс yearmon.
library(zoo)
DF2 <- transform(DF, monyear. = as.yearmon(monyear., "%m/%y"))
DF2[order(DF2$monyear.), ]
Примечание: вышеупомянутое использование DF
определяется как:
library(tesseract)
u <- "https://stackru.com/images/f51b03b31e03eb97e8db9a2cdd9afced7983cac0.png"
DF <- read.table(text = ocr(u), header = TRUE, as.is = TRUE)