根据各自的中位数绘制所有值
Plot all values against their respective medians
我有一个大型数据框,我计算了每行的中位数。为了简单起见,这是我的数据框
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 的值较少。这对于我的真实数据框来说也是如此,所以这绝对不是这样做的方法。
欢迎任何帮助或建议!
这可能是一种根据我的评论绘制数据箱线图的方法:
library(ggplot2)
library(tidyr)
library(dplyr)
df %>%
mutate(id = row_number()) %>%
pivot_longer(cols=c(-median, -id)) %>%
ggplot(aes(x=id, y=value, group=id)) +
geom_boxplot()
给你
编辑
根据您的评论,我认为您可以使用
df %>%
pivot_longer(cols=c(-median)) %>%
ggplot(aes(x=median, y=value, group=median)) +
geom_boxplot()
而不是上面显示的代码 returns 这个情节
这似乎是你想要做的。
stk <- data.frame(stack(df[, 1:3]), median=df$median)
这将生成像您的图片一样的箱线图,但中位数 6 将仅基于 3 个值:
table(stk$median)
#
# 2 5 6
# 6 6 3
使用条形图可能会提供更多信息:
stripchart(values~median, stk, method="stack", xlab="median", vert=TRUE)
我有一个大型数据框,我计算了每行的中位数。为了简单起见,这是我的数据框
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 的值较少。这对于我的真实数据框来说也是如此,所以这绝对不是这样做的方法。
欢迎任何帮助或建议!
这可能是一种根据我的评论绘制数据箱线图的方法:
library(ggplot2)
library(tidyr)
library(dplyr)
df %>%
mutate(id = row_number()) %>%
pivot_longer(cols=c(-median, -id)) %>%
ggplot(aes(x=id, y=value, group=id)) +
geom_boxplot()
给你
编辑
根据您的评论,我认为您可以使用
df %>%
pivot_longer(cols=c(-median)) %>%
ggplot(aes(x=median, y=value, group=median)) +
geom_boxplot()
而不是上面显示的代码 returns 这个情节
这似乎是你想要做的。
stk <- data.frame(stack(df[, 1:3]), median=df$median)
这将生成像您的图片一样的箱线图,但中位数 6 将仅基于 3 个值:
table(stk$median)
#
# 2 5 6
# 6 6 3
使用条形图可能会提供更多信息:
stripchart(values~median, stk, method="stack", xlab="median", vert=TRUE)