Отображение всех групп по оси Y в высоких чатах в R - PullRequest
0 голосов
/ 03 марта 2020

Я хотел бы знать, как я могу создать диаграмму старшей диаграммы, которая будет содержать все наблюдения для каждого идентификатора на оси Y для набора данных (df), например:

id  time    value
1   6:00    1
1   12:00   0
1   18:00   0
1   0:00    1
2   6:00    1   
2   12:00   1
2   18:00   1
2   0:00    0
3   6:00    0
3   12:00   0
3   18:00   0
3   0:00    1

Я могу создайте диаграмму, показывающую наблюдения для отдельных идентификаторов, но я хотел бы объединить ее.

Предпочтительный результат будет таким:

1| *                   *
2| *     *       *     
3|                     *
  6:00  12:00  18:00  0:00

Есть ли способ, как это сделать? Большое спасибо.

1 Ответ

1 голос
/ 09 марта 2020

Мне удалось создать необходимый чат, назначив разные значения для каждой группы, то есть [id: 1, value: 3], [id: 2, value; 2].

Исходное значение df:

id  time    value
1   6:00    1
1   12:00   0
1   18:00   0
1   0:00    1
2   6:00    1   
2   12:00   1
2   18:00   1
2   0:00    0
3   6:00    0
3   12:00   0
3   18:00   0
3   0:00    1

Поскольку id = 1 должен был находиться в верхней части графика, я присвоил ему наибольшее значение и опустился до последнего идентификатора с помощью наименьшее значение.

df$value <- ifelse(df$id == "1", 3, df$value)
df$value <- ifelse(df$id == "2", 2, df$value)
df$value <- ifelse(df$id == "3", 1, df$value)

Обновленный df:

1   6:00    3
1   12:00   0
1   18:00   0
1   0:00    3
2   6:00    2   
2   12:00   2
2   18:00   2
2   0:00    0
3   6:00    0
3   12:00   0
3   18:00   0
3   0:00    1

Тогда каждая группа может иметь свой собственный столбец. Идея состоит в том, чтобы получить каждый идентификатор в отдельном столбце, чтобы его можно было легко добавить на график в виде серии. Для этого подмножества и слияния могут быть использованы:

df_one <- subset(df, id == "1")
df_one <- select(df_one, time, value)
colnames(df_one) <- c("time", "value1")
df_two <- subset(df, id == "2")
df_two <- select(df_two, time, value)
colnames(df_one) <- c("time", "value2")
df_three <- subset(df, id == "3")
df_three <- select(df_three , time, value)
colnames(df_one) <- c("time", "value3")

df_final <- merge(df_one, df_two, by = "time", all.x = TRUE)
df_final <- merge(df_final, df_three, by = "time", all.x = TRUE)

Итоговый конечный df выглядит следующим образом:

time  value1  value2  value3
6:00    3       2       0
12:00   0       2       0
18:00   0       2       0
0:00    3       0       1

Затем его можно добавить к диаграмме:

hc <- highchart() %>% 
  hc_chart(type = "scatter") %>% 
  hc_xAxis(categories = df$time) %>% 
  hc_add_series(data = c(df$value1),
                name = "Id: 1"
                ) %>%
  hc_add_series(data = c(df$value2),
                name = "Id: 2"
                ) %>%
  hc_add_series(data = c(df$value3),
                name = "Id: 3"
                ) %>%
hc_exporting(enabled = TRUE)
hc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...