我正在使用以下代码。
library(ggplot2)
library(ggpubr)
mtcars$carb <- as.factor(mtcars$carb)
mtcars$am <- as.factor(mtcars$am)
ggplot(mtcars) +
geom_boxplot(aes(x = carb, y = mpg, fill = am),
position = position_dodge(0.9)) +
stat_compare_means(aes(x = carb, y = mpg, group = am), label = "p.format")
如何对从低到高的p值进行排序,以使在x轴上的排序变为carb = 2、1、4、3、6、8?
请注意,我需要将其应用于更大的数据集,因此需要使用p值而不是c(2,1,4,3,6,8)
进行排序。谢谢。
答案 0 :(得分:2)
感觉应该比此解决方案更简单,更优雅,但这是可行的。
方法:
am
和mpg
嵌套在carb
下am
(l == 2)仅具有两个唯一级别的行t.test
并添加一个带有p值的列carb
和pval
连接回原始数据pval
排序,并使carb
成为所需水平的因子(按pval
)ggplot
代码。请注意,在两种情况下,我都使用t.test
来比较均值,因此p值与您认为默认情况下使用wilcox检验的p值不同。
library(tidyverse)
library(ggpubr)
mtcars %>%
select(carb, am, mpg) %>%
mutate(am = factor(am)) %>%
nest(am, mpg) %>%
mutate(l = map_int(data, ~unique(.$am) %>% length)) %>%
filter(l == 2) %>%
mutate(pval = map_dbl(data, ~t.test(mpg ~ am, .)$p.value)) %>%
select(carb, pval) %>%
right_join(mtcars) %>%
arrange(pval) %>%
mutate(carb = factor(carb, levels = unique(.$carb)),
am = factor(am)) %>%
ggplot(aes(carb, mpg)) +
geom_boxplot(aes(fill = am)) +
stat_compare_means(aes(carb, mpg, group = am),
label = "p.format",
method = "t.test")
结果: