我有一个类似下面的df,其中x1和x2是变量,y1和y2是值。
ID x1 x2 y1 y2
1 a T 100 2
2 b T 210 4
3 b F 112 5
4 a F 121 1
5 b F 412 1
我想在它们之间制作4个箱图:y1~x1,y1~x2,y2~x1,y2~x2。有没有想过这样做?
我运行了一个boxplot函数,类似于
boxplot <- function(i,j){
ggplot(df, aes_string(x=i, y=j, col=i)+
geom_boxplot()
}
不完全相同,但它的测试和功能类似于boxplot(x1,y1)等。 但我不知道如何将函数应用于i = c(x1,x2),j = c(y1,y2),以便一次性绘制所有关系。我试过申请,lapply,tapply,mapply,Map。
提前致谢!
答案 0 :(得分:1)
一种方法是melt
两次数据:
df <- read.table(header = TRUE, stringsAsFactors = FALSE,
text = "ID x1 x2 y1 y2
1 a T 100 2
2 b T 210 4
3 b F 112 5
4 a F 121 1
5 b F 412 1")
library('ggplot2')
library('reshape2')
mm <- melt(melt(df[, -1], id.vars = c('y1','y2')), id.vars = c('variable','value'))
names(mm) <- make.unique(names(mm))
ggplot(mm, aes(value, value.1)) +
geom_boxplot() +
facet_wrap(variable ~ variable.1, drop = TRUE, scales = 'free')