从R

时间:2018-04-17 21:58:53

标签: r vector shiny dplyr waffle-chart

我的数据集简化如下:

print(data)
Team   Colour
A      Red
B      Red
C      Blue
D      Green

我想制作这个数据的华夫饼图(方饼图)。我可以通过以下方式轻松完成:

waffle(c(Red = sum(data$Colour == "Red"), 
         Blue = sum(data$Colour = "Blue"), 
         Green = sum(data$colour = "Green")))

然而,我似乎无法通过操纵我的数据集找到一种简单的方法来生成在上面的华夫饼函数中创建的命名整数。我需要直接从原始数据集中生成它,因为我需要它在闪亮的应用程序中成为反应函数。

我尝试在dplyr中使用group_by

forwaffle <- data%>%
             group_by(Colour)
             summarise(frequency=n())

但是,我无法将此列表转换为所需的命名整数。我尝试过使用t()unlist(),但这些都没有达到我想要的结果。

2 个答案:

答案 0 :(得分:0)

如果通过“必需的命名整数”表示颜色应该是列名,那么您可以使用tidyr::spread

library(dplyr)
library(tidyr)

data %>% 
  group_by(Colour) %>% 
  summarise(frequency = n()) %>% 
  spread(Colour, frequency)

# A tibble: 1 x 3
   Blue Green   Red
  <int> <int> <int>
1     1     1     2

答案 1 :(得分:0)

更新

使用tidyverse的较短deframe解决方案(感谢@ r2evans):

count(df, Colour) %>%
    tibble::deframe() %>%
    waffle(.)

@ r2evans在上述评论中的解决方案绝对是最简洁的,但如果你坚持使用tidyverse方法,你可以这样做:

setNames(
    df %>% count(Colour) %>% pull(n),
    df %>% count(Colour) %>% pull(Colour)) %>%
waffle(.)

enter image description here

样本数据

df <- read.table(text =
    "Team   Colour
A      Red
B      Red
C      Blue
D      Green", header = T)