如何使用 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
列中,我只想检测 Breakfast
和 Dinner
class a
、b
和 c
所以从那个数据框我只想在 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
.
如有任何帮助,我们将不胜感激。
我们可以 subset
和 table
在用 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)
我在访问列中的特定 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
列中,我只想检测 Breakfast
和 Dinner
class a
、b
和 c
所以从那个数据框我只想在 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
.
如有任何帮助,我们将不胜感激。
我们可以 subset
和 table
在用 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)