2017-01-06 4 views
1

Я делаю несколько поисковых материалов в наборе данных, который включает определенные транзакции.Сортировка частотной матрицы по последовательности дней недели в R

Каждая строка представляет собой транзакцию с определенной датой. Я хочу создать частотную матрицу транзакций для разных будних дней.

table(weekdays(x$date)) 

Это работает, но дни недели в алфавитном порядке (e.g. Mo, Fr, Sa, Tu..) вместо логического порядка (Mo, Tu, We..).

Кто-нибудь знает, как легко это исправить? Или мне нужно факторизовать результат?

С наилучшими пожеланиями, Маркус

+0

Использование 'factor', вероятно, будет лучшим выбором здесь, вы можете также сделать' таблицу (...) [с (1 , 4, ...)] ', если вы знаете порядок, в котором' R' предоставляет имена – bouncyball

+1

Подробнее: 'wkdays <- c ('Mo', 'Tu', 'We', 'Th', ' Fr ',' Sa ',' Su '), set.seed (123), x <- table (sample (wkdays, 1000, T)), x [c (2, 6, 7, 5, 1, 3, 4)] ' – bouncyball

+1

Переупорядочение, как указано выше, или вы можете создать его из последовательности дат:' daysOrdered <- weekdays (seq (as.Date ("2017-1-2"), length.out = 7, by = "da y "))' then 'table (...) [daysOrdered]'. – lmo

ответ

3

Используйте factor:

# oldlocale <- Sys.getlocale("LC_TIME") 
# Sys.setlocale("LC_TIME", "english") 
table(factor(
    weekdays(Sys.Date()+0:7), 
    levels=c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday") 
)) 
    # Monday Tuesday Wednesday Thursday Friday Saturday Sunday 
    #  1   1   1   1   2   1   1 
# Sys.setlocale("LC_TIME", oldlocale) 
+0

Просто быть педантичным, но воскресенье - первый день недели. –

+0

Не стесняйтесь настраивать/обсуждать его. ;-) – lukeA

Смежные вопросы