R: Линейный график Как отобразить значение x в виде года и месяца в правильной последовательности? - PullRequest
0 голосов
/ 27 февраля 2020

Я хочу построить линейный график по количеству orders_due, до которого пользователь ежемесячно. Нужно отображать месяц_год должен быть в последовательности.

Набор данных как

User            Due_date 
a               02-10-2017
b               02-02-2017
a               02-08-2017
c               02-08-2017
a               02-08-2017
s               02-06-2017
c               02-06-2017
s               02-06-2017
b               02-06-2017
c               02-11-2017
a               02-11-2017
s               02-11-2017
c               02-01-2017
s               02-01-2017
b               02-01-2017
b               02-10-2017

Я пытаюсь сгенерировать его, но порядок по месяцам не получается.

inv$Month_Due <- inv$Due_Date
day(inv$Month_Due) <- days_in_month(inv$Due.Date)

inv<-inv[order(as.Date(inv$Due_Date, format="%d/%m/%Y")),]
inv$start_year_month <- format(inv$Month_Due, "%Y-%B")


#Chart generate
rpivotTable(inv,  aggregatorName = "Count as Fraction of Total",  rows = "User",  cols = c("start_year_month"),  width = "100%",  height = "200px",rendererName = "Line Chart")

Отчет отображает результат как: enter image description here

1 Ответ

0 голосов
/ 27 февраля 2020

Проблема в том, что ваша переменная start_year_month является символьной строкой (или фактором) и отсортирована в алфавитном порядке.

После вызова

inv$start_year_month <- format(inv$Month_Due, "%Y-%B")

R больше не «знает» start_year_month кодирует информацию data.time и использует переменную, как если бы она была строкой (= алфавитный c сортировка).

Вы можете:

1. (лучшее решение) оставьте его как столбец data.time и используйте его для построения

или

2. Сделайте его упорядоченным с помощью параметра levels и передав ему вектор со всеми уникальными значения для start_year_month в правильном порядке. Т.е.

inv$start_year_month <- factor(inv$start_year_month, levels=paste(unique(format(inv$Month_Due, "%Y")), month.name, sep="-"))
...