我有2个数据帧共享相同的行ID但具有不同的列
这是一个例子
chrom coord sID CM0016 CM0017 CM0018
7 10 3178881 SP_SA036,SP_SA040 0.000000000 0.000000000 0.0009923
8 10 38894616 SP_SA036,SP_SA040 0.000434783 0.000467464 0.0000970
9 11 104972190 SP_SA036,SP_SA040 0.497802888 0.529319536 0.5479003
和
chrom coord sID CM0001 CM0002 CM0003
4 10 3178881 SP_SA036,SA040 0.526806527 0.544927536 0.565610860
5 10 38894616 SP_SA036,SA040 0.009049774 0.002849003 0.002857143
6 11 104972190 SP_SA036,SA040 0.451612903 0.401617251 0.435318275
我正在尝试创建一个复合箱图图,其中我在x轴上有chrom
和coord
组合(所以3个点)和每个x值2个箱图并排对应两个数据帧?
这样做的最佳方式是什么?我应该以某种方式将两个数据帧合并在一起,以便只获得一个并通过3列循环显示箱形图?
关于如何做到这一点的任何想法?
问题是两个数据帧的行数相同但列数不同
> dim(A)
[1] 99 20
> dim(B)
[1] 99 28
我正在考虑转置数据框以获得相同数量的列,但是如何正确地丢失 提前致谢
更新
这就是我试图做的事情
然后我用这个
创建了一个箱形图ggplot(A2A4,aes(因子(组合),值))+ geom_boxplot(aes(fill = factor(variable)))
我认为它解决了我的问题,但是箱图看起来很忙,有99个x值,每个都有2个箱图
答案 0 :(得分:2)
所以如果这些是你的输入表
d1<-structure(list(chrom = c(10L, 10L, 11L),
coord = c(3178881L, 38894616L, 104972190L),
sID = structure(c(1L, 1L, 1L), .Label = "SP_SA036,SP_SA040", class = "factor"),
CM0016 = c(0, 0.000434783, 0.497802888), CM0017 = c(0, 0.000467464,
0.529319536), CM0018 = c(0.0009923, 9.7e-05, 0.5479003)), .Names = c("chrom",
"coord", "sID", "CM0016", "CM0017", "CM0018"), class = "data.frame", row.names = c("7",
"8", "9"))
d2<-structure(list(chrom = c(10L, 10L, 11L), coord = c(3178881L,
38894616L, 104972190L), sID = structure(c(1L, 1L, 1L), .Label = "SP_SA036,SA040", class = "factor"),
CM0001 = c(0.526806527, 0.009049774, 0.451612903), CM0002 = c(0.544927536,
0.002849003, 0.401617251), CM0003 = c(0.56561086, 0.002857143,
0.435318275)), .Names = c("chrom", "coord", "sID", "CM0001",
"CM0002", "CM0003"), class = "data.frame", row.names = c("4",
"5", "6"))
然后我会组合并重塑数据,以便更容易绘制。这就是我要做的事情
m1<-melt(d1, id.vars=c("chrom", "coord", "sID"))
m2<-melt(d2, id.vars=c("chrom", "coord", "sID"))
dd<-rbind(cbind(m1, s="T1"), cbind(m2, s="T2"))
mm$pos<-factor(paste(mm$chrom,mm$coord,sep=":"),
levels=do.call(paste, c(unique(dd[order(dd[[1]],dd[[2]]),1:2]), sep=":")))
我首先melt
两个输入表将列转换为行。然后我在每个表中添加一列,以便我知道数据的来源和rbind
它们在一起。最后,我做了一些混乱的工作,使chr / coord对中的因子按正确的顺序排序。
完成所有这些后,我将制作如
的情节ggplot(mm, aes(x=pos, y=value, color=s)) +
geom_boxplot(position="dodge")
看起来像