Добавление записей с нулевым значением, чтобы все группы имели записи для одних и тех же элементов

Я пытаюсь использовать Rcharts для создания гистограммы с накоплением по нескольким записанным регионам (наложение отдельных групповых значений сверху друг друга). Данные представлены в формате, аналогичном приведенному ниже.

Region | Group | Value
----------------------
USA    |   A   |   5
USA    |   B   |   3
USA    |   C   |   1
UK     |   A   |   4
UK     |   B   |   6
France |   C   |   3

Использование приведенного ниже кода создает сгруппированную гистограмму, которая отлично работает. Однако сложенная кнопка никак не влияет на сюжет.

nPlot(Value ~ Region, group = 'Group', 
      data = example_data, 
      type = 'multiBarChart')

Глядя на эту тему, кажется, что проблема может заключаться в том, что в некоторых регионах нет записей для все присутствующие группы (например, в Великобритании нет записи для C, а во Франции нет записей для A и B).

В чем я не уверен, так это в том, как добавить записи со значением == 0, чтобы все регионы имели запись для каждой существующей группы. Так что приведенные выше данные преобразуются в эти (порядок записей не имеет значения).

Region | Group | Value
----------------------
USA    |   A   |   5
USA    |   B   |   3
USA    |   C   |   1
UK     |   A   |   4
UK     |   B   |   6
UK     |   C   |   0
France |   A   |   0
France |   B   |   0
France |   C   |   3

В конечном итоге это будет помещено в реактивный компонент приложения Shiny, поэтому эффективные решения, в частности, будут отличными.


person E Keith    schedule 08.11.2015    source источник


Ответы (1)


Мы можем использовать complete() из пакета tidyr:

Это оболочка вокруг expand(), left_join() и replace_na, полезная для заполнения отсутствующих комбинаций данных. Он превращает неявно отсутствующие значения в явно отсутствующие значения.

library(tidyr)
library(rCharts)

df %>% 
  complete(Region, Group, fill = list(Value = 0)) %>%
  nPlot(Value ~ Region, group = 'Group', 
        data = ., 
        type = 'multiBarChart')

Сгруппировано

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

В стопке

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


Данные

df <- structure(list(Region = structure(c(3L, 3L, 3L, 2L, 2L, 1L), .Label = c("France", 
"UK", "USA"), class = "factor"), Group = structure(c(1L, 2L, 
3L, 1L, 2L, 3L), .Label = c("A", "B", "C"), class = "factor"), 
    Value = c(5L, 3L, 1L, 4L, 6L, 3L)), .Names = c("Region", 
"Group", "Value"), class = "data.frame", row.names = c(NA, -6L))
person Steven Beaupré    schedule 08.11.2015