#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()