具有不同可变长度列 b/w 两个数据框的箱线图

Box plot with different variable length columns b/w two data frames

我有两个数据框。它们的长度不同。

df1:
 Samples   Number
 A9GS        73
 A9GY        142
 ASNO        327
 A5UE        131

df2:
 Samples   Number
 AUFS        107
 A9JY        42
 AKNO        32
 A9FE        111
 A9GY        12
 ADNO        37
 A2KE        451

我已经对此进行了 wilcoxon 测试。

wilcox.test(df1$Number,df2$Number, correct=FALSE)

这给了我 p 值。为了形象化这一点,我使用了箱形图函数并给出了如下错误。

boxplot(df1$Number ~ df2$Number, xlim=c(0.5,3))
Error in model.frame.default(formula = df1$Number ~ df2$Number) : 
  variable lengths differ (found for 'df2$Number')

任何人都可以纠正我的错误并告诉我如何在图上获得 p 值。谢谢

只有当这些数据框与数据框存在 1-1 配对时(RHS 通常是组变量而不是数字变量),您才能使用该公式,但显然没有。您需要使用列表传递系统而不是公式一个。我会看看我是否可以构建一个工作示例。

情节是通过以下方式实现的:

png(); boxplot( list(df1_N=df1$Number, df2_N = df2$Number) ); dev.off()

并且可以使用 text 函数完成注释,该函数接受通常由 bquote.

构造的 ?plotmath 参数
text( 1.5, 400, 
   label=bquote( 
       p~value == .(wilcox.test(df1$Number,df2$Number, correct=FALSE)$p.value)
    ) )

如果您想对 p 值进行舍入,请在 .( )-函数

中围绕表达式使用 round( ... )

只需将两个数据框放在一起,然后将 p 值粘贴到图上即可:

df1 <- data.frame(samples = c('A9GS', 'A9GY', 'ASNO', 'ASUE'),
                      number = c(73, 142, 327, 131))
df2 <- data.frame(samples=c('AUFS', 'A9JY', 'AKNO', 'A9FE', 'A9GY', 'ADNO', 
                                'A2KE'),
                      number = c(107, 42, 32, 111, 12, 37, 451))

df1$group <- 'df1'
df2$group <- 'df2'

df <- rbind(df1, df2)

m<-wilcox.test(df1$number,df2$number, correct=FALSE)

library(ggplot2)
jpeg('path/to/where/you/want/the/file/saved/picture.jpeg')
ggplot(df, aes(x=group, y=number, group=group)) + 
  geom_boxplot() +
  annotate('text', label=paste('p =', round(m$p.value, 2)), x=.5, y=400)
dev.off()

产量: