R - 添加零值条目,以便所有组都具有相同项的条目

时间:2015-11-08 19:56:02

标签: r dplyr rcharts data-manipulation

我尝试使用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')

看看this主题似乎问题可能是某些地区没有所有现有团体的参赛作品(例如,英国缺少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应用程序的反应组件中,因此特别有效的解决方案会很棒

1 个答案:

答案 0 :(得分:2)

我们可以使用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')

<强>分组

enter image description here

<强>堆叠

enter image description here

数据

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