如何使用 r 访问列中的某些特定 类?

How to access some specific classes in a column using r?

我在访问列中的特定 class 时遇到问题。我有如下数据框:

library(ggplot2)
library(dplyr)

dat <- data.frame(
  time = factor(c("Breakfast","Breakfast","Breakfast","Breakfast","Breakfast","Lunch","Lunch","Lunch","Lunch","Lunch","Lunch","Dinner","Dinner","Dinner","Dinner","Dinner","Dinner","Dinner"), levels=c("Breakfast","Lunch","Dinner")),
  class = c("a","a","b","b","c","a","b","b","c","c","c","a","a","b","b","b","c","c"))

time 列中,我只想检测 BreakfastDinner class abc 所以从那个数据框我只想在 table 中查看它,它看起来像这样:

            a    b    c
Breakfast   2    2    1
Dinner      2    3    2

所以对于每个 class a,b,c 我想画两个柱。例如 class a 一根柱子代表: Breakfast 与其他 class 相比的平均值:2/(2+2+1) 而另一根柱子代表 Dinner 与其他 classes 比较:2/(2+3+2) 并将它们设置为不同的颜色。我想要 class b 和 class c.

如有任何帮助,我们将不胜感激。

我们可以 subsettable 在用 droplevels

删除 levels 之后
table(droplevels(subset(dat, time %in% c("Breakfast", "Dinner"))))
#           class
#time        a b c
#  Breakfast 2 2 1
# Dinner    2 3 2

如果我们需要 barplot

barplot(prop.table(table(droplevels(subset(dat, time %in% 
            c("Breakfast", "Dinner")))), 1), beside = TRUE)

ggplot

library(dplyr)
library(ggplot2)
dat %>% 
   filter(time %in% c("Breakfast", "Dinner")) %>%
   droplevels %>%
   count(time, class) %>% 
   group_by(time) %>% 
   mutate(prop = n/sum(n)) %>%
   ggplot(aes(x = class, y = prop, fill = time, label = scales::percent(prop))) +
   geom_col(position = 'dodge') +
   geom_text(position = position_dodge(width = 0.9), vjust = 0.5, size = 3) + 
   scale_y_continuous(labels = scales::percent)