【发布时间】:2021-07-04 22:58:36
【问题描述】:
我有一个大型数据框,我计算了每行的中位数。为简单起见,这是我的数据框
df <- as.data.frame(rbind(c(1,2,3),c(2,2,5),c(5,4,5),c(5,6,5),c(2,6,6)))
df$median = apply(df, 1, median, na.rm=T)
df
V1 V2 V3 median
1 1 2 3 2
2 2 2 5 2
3 5 4 5 5
4 5 6 5 5
5 2 6 6 6
现在我想根据各自的中位数制作所有值的箱线图。因此,将有一个 x 轴,其中位数为 2、5 和 6,并且在 y 轴上计算中位数的所有值。
我对 R 很陌生,不知道该怎么做。我用作弊数据框做了一个图来说明我想要什么:
df2 <- cbind(c(1,2,3,2,2,5),c(5,4,5,5,6,5),c(4,6,6))
colnames(df2) <- c("2","5","6")
df2
2 5 6
[1,] 1 5 4
[2,] 2 4 6
[3,] 3 5 6
[4,] 2 5 4
[5,] 2 6 6
[6,] 5 5 6
boxplot(df2, xlab="median")
如何通过代码实现这一点?如您所见,第三列的值重复,因为对应于中位数 6 的值较少。这对于我的真实数据帧当然也是如此,所以这绝对不是这样做的方法。
欢迎任何帮助或建议!
【问题讨论】:
-
对我来说,这没有意义。通常,箱线图显示中位数,您不会将其放在 x 轴上。在您的情况下,基于
df,我将为每一行创建一个箱线图,将行号放在 x 轴上,将值放在 y 轴上。 -
感谢您的回复!我同意这可能是一种不直观的绘图方式。我的真实数据框有点大(6000 行),所以我真的很想按各自的中位数对数据进行分组,以获得更少的箱线图。
-
如果两行的中位数相同,绘图会是什么样子?您想要多个具有相同中位数的箱线图,还是想要一个组合数据的箱线图?
-
每个中位数的一个箱线图,无论有多少值/观察导致该中位数。所以如果我有 3 个独特的中位数,我想要 3 个箱线图。我想知道如何开始这样做。我的猜测是我需要根据中位数对我的数据进行子集化,制作单独的箱线图并将它们组合到 ggplot 中。这听起来对你有意义吗?
-
听起来不错。但是,如果您没有唯一的中位数会怎样?