【问题标题】:Creating a named vector from a dataset in R从 R 中的数据集创建命名向量
【发布时间】:2018-04-17 21:58:53
【问题描述】:

我有一个简化如下的数据集:

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

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

我尝试在 dplyr 中使用 group_by

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

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

【问题讨论】:

  • 请您编辑您的华夫饼代码示例以使其正常工作。缺少“=”和混合的大写/小写颜色/颜色。很难知道期望的结果应该是什么。您的第二个示例也缺少管道。
  • waffle(table(data$Colour))?

标签: r vector shiny dplyr waffle-chart


【解决方案1】:

如果“必需的命名整数”是指颜色应该是列名,那么你可以使用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

【讨论】:

    【解决方案2】:

    更新

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

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

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

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


    样本数据

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

    【讨论】:

    • 替代方案:count(df, Colour) %&gt;% tibble::deframe()... %&gt;% with(., setNames(n, Colour))
    • 啊,deframe 就是我要找的东西!!谢谢@r2evans。如果我将此添加到解决方案中,希望您不介意。
    • 请随意!我更喜欢只计算一次,双管法让我抽搐;-)
    • @r2evans 是的,双管很糟糕;-) 试图避免但走错了路,尝试(但失败)使用 purrr:map...
    • 好吧,map 也可以。最好保存 count 结果并处理它们,但话说回来,SO 可能是一个“仓促的解决方案”网站,并不总是值得付出更多的努力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 2021-09-06
    • 2012-05-26
    相关资源
    最近更新 更多