Как мне отобразить сгруппированные данные, отсортированные по количеству записей в каждой группе, в R?

#r #ggplot2 #dplyr

#r #ggplot2 #dplyr

Вопрос:

У меня есть данные, которые выглядят как этот пример здесь: http://pastebin.com/5MPCFGWK

Мне нужно отобразить каждую id из них в виде временной шкалы, поэтому я делаю что-то вроде этого.

 ggplot(df, aes(x=relative_timestamp, y=id, color=action))
  

какой вид работ, за исключением того, что это не самая полезная диаграмма. Я решил, что попытаюсь отсортировать группы по количеству событий, которые у них есть, но я не могу понять, как. Я попробовал свои силы, dplyr но запутался в документах, и мне едва удалось сгруппировать id фрейм данных. Идеи?

РЕДАКТИРОВАТЬ Я добавил образец CSV. Моя цель — отобразить эти временные рамки, отсортированные по количеству записей, которые у них есть, поэтому в этом случае 0 — это тот, у которого наименьшее количество, а 1 — тот, у которого наибольшее количество. Еще лучше было бы отобразить их (отдельный график, не такой, как указано выше), отсортированных по времени последнего действия ЗАКРЫТИЯ (в любом случае в каждой группе должно быть ровно по одному).

Комментарии:

1. Пожалуйста, сделайте ваш пример воспроизводимым, чтобы другим было легче вам помочь

2. o <- count(df, action, sort = TRUE); df$action <- factor(df$action, levels = o$action) затем отобразите

3. скорее всего, вы хотите сделать что-то вроде aes(x= relative_timestamp, y= as.numeric(action), color = id) — этот простой экземпляр будет использовать произвольное числовое кодирование ваших состояний действия. В идеале немного обогатите свой вопрос, как предложил @Sotos

4. Спасибо, посмотрите, помогает ли CSV в pastebin.

5. @Axeman Ах, нет, я имел в виду не количество этих отдельных действий, а количество строк id , с которыми связано определенное. CSV, который я добавил, должен прояснить. Итак, каждый id из них представляет собой «сеанс», в каждом сеансе пользователь мог выполнить любое количество различных действий. Я хочу отображать сеансы в виде отдельных строк с точками разных цветов для представления каждого отдельного действия в то время, когда эти действия происходили. Посмотрите, поможет ли это pbs.twimg.com/media/CtmPN3yXYAATwOG.png:large

Ответ №1:

Вам нужно будет преобразовать id числовое значение в коэффициент, а затем упорядочить эти коэффициенты по любой интересующей вас метрике. Здесь я использовал dplyr для создания вызываемого data.frame forSort , который содержит идентификаторы и набор вещей, которые вы, возможно, захотите отсортировать:

 forSort <-
  testDF %>%
  group_by(id) %>%
  summarise(n = n()
            , max = max(relative_timestamp)) 

forSort

#      id     n    max
# 1     0    12 244753
# 2     1    85 447680
# 3     2    22 156005
  

По количеству действий:

 ggplot(testDF %>%
         mutate(id = factor(id, levels = forSort$id[order(forSort$n)]))
       , aes(x=relative_timestamp
             , y= id
             , color=action))  
  geom_point()
  

введите описание изображения здесь

По времени последнего действия:

 ggplot(testDF %>%
         mutate(id = factor(id, levels = forSort$id[order(forSort$max)]) )
       , aes(x=relative_timestamp
             , y= id
             , color=action))  
  geom_point()
  

введите описание изображения здесь