按逻辑变量分组的数值变量的箱线图
Boxplots of numeric variable grouped by logical variables
我有一个包含一个数值变量 (PTV) 和两个分类变量(habit 和 ffg)的数据集,这两个分类变量被列为逻辑变量。所以我有一系列名为 HABIT_BU、FFG_SH、FFG_SC 的列。我将如何创建箱形图,其中每个箱子是每个类别的 TRUE 观察值的 PTV。我将如何格式化它以使最终结果看起来像这个图?
谢谢!
假设您有以下数据集:
PTV = rnorm(100)
HABIT_BU = c(rep(TRUE,50),rep(FALSE,50))
FFG_SH = c(rep(TRUE,50),rep(FALSE,50))
FFG_SC = c(rep(TRUE,50),rep(FALSE,50))
df <- data.frame(PTV, HABIT_BU, FFG_SH, FFG_SC)
所以虚拟数据集看起来像:
> head(df)
PTV HABIT_BU FFG_SH FFG_SC
1 -0.14361156 TRUE TRUE TRUE
2 -1.36115367 TRUE TRUE TRUE
3 0.68461065 TRUE TRUE TRUE
4 -0.40292344 TRUE TRUE TRUE
5 -0.01070836 TRUE TRUE TRUE
6 0.44495130 TRUE TRUE TRUE
> str(df)
'data.frame': 100 obs. of 4 variables:
$ PTV : num -0.1436 -1.3612 0.6846 -0.4029 -0.0107 ...
$ HABIT_BU: logi TRUE TRUE TRUE TRUE TRUE TRUE ...
$ FFG_SH : logi TRUE TRUE TRUE TRUE TRUE TRUE ...
$ FFG_SC : logi TRUE TRUE TRUE TRUE TRUE TRUE ...
它是否对应于您的实际数据集? (如果没有,请提供可重现的数据集)
现在,我们可以使用 tidyr
重塑您的数据
library(tidyr)
df %>% pivot_longer(.,-PTV, names_to = "Variable", values_to = "Values")
# A tibble: 300 x 3
PTV Variable Values
<dbl> <chr> <lgl>
1 -0.144 HABIT_BU TRUE
2 -0.144 FFG_SH TRUE
3 -0.144 FFG_SC TRUE
4 -1.36 HABIT_BU TRUE
5 -1.36 FFG_SH TRUE
6 -1.36 FFG_SC TRUE
7 0.685 HABIT_BU TRUE
8 0.685 FFG_SH TRUE
9 0.685 FFG_SC TRUE
10 -0.403 HABIT_BU TRUE
# … with 290 more rows
我们可以使用 ggplot
:
绘制它
library(tidyr)
library(ggplot2)
df %>% pivot_longer(.,-PTV, names_to = "Variable", values_to = "Values") %>%
ggplot(.,aes(x = Values, y = PTV, fill = Values))+
geom_boxplot()+
facet_grid(.~Variable)
要获取此箱线图:
如果您只想绘制每个类别的 TRUE 值,您可以使用 dplyr
:
中的函数 filter
library(dplyr)
library(tidyr)
library(ggplot2)
df %>% pivot_longer(.,-PTV, names_to = "Variable", values_to = "Values") %>% filter(., Values == TRUE) %>%
ggplot(.,aes(x = Values, y = PTV, fill = Values))+
geom_boxplot()+
facet_grid(.~Variable)
你会得到:
或者由于您的所有类别只包含一个值,您可以这样绘制它们:
df %>% pivot_longer(.,-PTV, names_to = "Variable", values_to = "Values") %>% filter(., Values == TRUE) %>%
ggplot(.,aes(x = Variable, y = PTV, fill = Variable))+
geom_boxplot()
它能回答您的问题吗?
如果没有,请考虑提供一个可重现的数据集示例(参见此处:How to make a great R reproducible example)
我有一个包含一个数值变量 (PTV) 和两个分类变量(habit 和 ffg)的数据集,这两个分类变量被列为逻辑变量。所以我有一系列名为 HABIT_BU、FFG_SH、FFG_SC 的列。我将如何创建箱形图,其中每个箱子是每个类别的 TRUE 观察值的 PTV。我将如何格式化它以使最终结果看起来像这个图?
谢谢!
假设您有以下数据集:
PTV = rnorm(100)
HABIT_BU = c(rep(TRUE,50),rep(FALSE,50))
FFG_SH = c(rep(TRUE,50),rep(FALSE,50))
FFG_SC = c(rep(TRUE,50),rep(FALSE,50))
df <- data.frame(PTV, HABIT_BU, FFG_SH, FFG_SC)
所以虚拟数据集看起来像:
> head(df)
PTV HABIT_BU FFG_SH FFG_SC
1 -0.14361156 TRUE TRUE TRUE
2 -1.36115367 TRUE TRUE TRUE
3 0.68461065 TRUE TRUE TRUE
4 -0.40292344 TRUE TRUE TRUE
5 -0.01070836 TRUE TRUE TRUE
6 0.44495130 TRUE TRUE TRUE
> str(df)
'data.frame': 100 obs. of 4 variables:
$ PTV : num -0.1436 -1.3612 0.6846 -0.4029 -0.0107 ...
$ HABIT_BU: logi TRUE TRUE TRUE TRUE TRUE TRUE ...
$ FFG_SH : logi TRUE TRUE TRUE TRUE TRUE TRUE ...
$ FFG_SC : logi TRUE TRUE TRUE TRUE TRUE TRUE ...
它是否对应于您的实际数据集? (如果没有,请提供可重现的数据集)
现在,我们可以使用 tidyr
library(tidyr)
df %>% pivot_longer(.,-PTV, names_to = "Variable", values_to = "Values")
# A tibble: 300 x 3
PTV Variable Values
<dbl> <chr> <lgl>
1 -0.144 HABIT_BU TRUE
2 -0.144 FFG_SH TRUE
3 -0.144 FFG_SC TRUE
4 -1.36 HABIT_BU TRUE
5 -1.36 FFG_SH TRUE
6 -1.36 FFG_SC TRUE
7 0.685 HABIT_BU TRUE
8 0.685 FFG_SH TRUE
9 0.685 FFG_SC TRUE
10 -0.403 HABIT_BU TRUE
# … with 290 more rows
我们可以使用 ggplot
:
library(tidyr)
library(ggplot2)
df %>% pivot_longer(.,-PTV, names_to = "Variable", values_to = "Values") %>%
ggplot(.,aes(x = Values, y = PTV, fill = Values))+
geom_boxplot()+
facet_grid(.~Variable)
要获取此箱线图:
如果您只想绘制每个类别的 TRUE 值,您可以使用 dplyr
:
filter
library(dplyr)
library(tidyr)
library(ggplot2)
df %>% pivot_longer(.,-PTV, names_to = "Variable", values_to = "Values") %>% filter(., Values == TRUE) %>%
ggplot(.,aes(x = Values, y = PTV, fill = Values))+
geom_boxplot()+
facet_grid(.~Variable)
你会得到:
或者由于您的所有类别只包含一个值,您可以这样绘制它们:
df %>% pivot_longer(.,-PTV, names_to = "Variable", values_to = "Values") %>% filter(., Values == TRUE) %>%
ggplot(.,aes(x = Variable, y = PTV, fill = Variable))+
geom_boxplot()
它能回答您的问题吗?
如果没有,请考虑提供一个可重现的数据集示例(参见此处:How to make a great R reproducible example)