【问题标题】:Pie chart 3 options饼图 3 选项
【发布时间】:2018-01-31 06:27:01
【问题描述】:

我现在完全迷失了 R。过去一周我一直在尝试自学它,但我已经被饼图问题困住了两天,我似乎无法弄清楚。

我有一个有几列的表。用其中两个我想创建一个饼图。 第一个称为“Rabatt”,第二个称为“Gewinnspiel”,现在它们既可以是 0 表示 False,也可以 1 表示 True,但两行中的任何一行都不能为 True。所以组合可以是 00 10 或 01。现在我想要一个饼图,显示 00、10 或 01 的百分比。 但是我如何告诉 R 只显示两行中包含值 1 的百分比(因为当它们包含值 0 时,它们是 False 并且不相关,直到它们都为 False),将这两个加起来,然后还显示百分比两者都为 0 的情况?

我希望我的解释是可以理解的。

这是数据的一部分(总共超过 100 行)。

Rabatt  Gewinnspiel
0       0
0       0
0       0
1       0
1       0
1       0
0       0
1       0
1       0
1       0
1       0
1       0
1       0
1       0
0       1
0       1
1       0
1       0
0       0

【问题讨论】:

  • 请附上您使用的部分数据

标签: r pie-chart


【解决方案1】:

如果您不想为此任务使用额外的包并且在标签中也有您的 %-numbers,请尝试以下操作(其中 df 是您的数据框):

df <- read.table(text = "Rabatt  Gewinnspiel
0       0
                 0       0
                 0       0
                 1       0
                 1       0
                 1       0
                 0       0
                 1       0
                 1       0
                 1       0
                 1       0
                 1       0
                 1       0
                 1       0
                 0       1
                 0       1
                 1       0
                 1       0
                 0       0", header = TRUE)

pie_tbl <- table(with(df, paste0(Rabatt, Gewinnspiel)))
pie(x = pie_tbl, labels = paste0(names(pie_tbl), ": ", round(pie_tbl/sum(pie_tbl)*100), "%"))

【讨论】:

    【解决方案2】:

    这是一个示例,如何使用包 dplyrtable 函数完成此操作

    你的数据

      df = read.table(header = T, stringsAsFactors = F,  text  = "Rabatt  Gewinnspiel
    0       0
    0       0
    0       0
    1       0
    1       0
    1       0
    0       0
    1       0
    1       0
    1       0
    1       0
    1       0
    1       0
    1       0
    0       1
    0       1
    1       0
    1       0
    0       0")
    

    您通过加入 Rabatt 和 Gewinnspiel 创建名为 ny_var 的新变量

    df <- df %>% mutate(ny_var = paste(Rabatt, Gewinnspiel, sep = ""))
    

    您将新变量绘制为饼图

    pie(table(df$ny_var))
    

    您可以查看汇总数据

    table(df$ny_var)
    

    【讨论】:

    • 谢谢。但我不太确定我应该在哪里插入数据?
    • 对于那个管道和mutate,您不需要额外的包。你可以使用transform
    【解决方案3】:

    这是一种方法:

    #data
    df <- read.table(text = "Rabatt  Gewinnspiel
        0       0
                         0       0
                         0       0
                         1       0
                         1       0
                         1       0
                         0       0
                         1       0
                         1       0
                         1       0
                         1       0
                         1       0
                         1       0
                         1       0
                         0       1
                         0       1
                         1       0
                         1       0
                         0       0", header = T, stringsAsFactors = F)
    
    #Create a factor based on combination
    df$Data <- as.factor(paste(df$Rabatt, df$Gewinnspiel, sep = ""))
    
    library(dplyr)
    #Calculate number of occurrence for each combination using summarise
    df_mod <- df %>%
      group_by(Data) %>%
      summarise(Count = n())
    
    #Draw pie
    pie(df_mod$Count, df_mod$Data)
    

    【讨论】: