为R设置CSV文件以显示直方图

时间:2010-07-26 18:58:42

标签: r lattice

问候,

基本上,我有两个数据向量(我们称之为实验和基线)。我想使用R的点阵库和直方图函数来并排绘制两个直方图,就像在this page末尾看到的那样。

我将数据保存在CSV文件中:

Label1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
Label2,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
Label3,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
Label4,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
Label5,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
Label6,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18

每行应该是一对新的直方图。第1-9列表示实验数据(左侧直方图)。第10-18列表示基线数据(右侧直方图)。

任何人都可以帮我这个吗?感谢。

2 个答案:

答案 0 :(得分:1)

您的数据格式不正确,无法使用lattice进行分面。您可以使用reshape对其进行重组。

read.csv(textConnection("Label1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
Label2,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
Label3,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
Label4,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
Label5,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
Label6,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"), header = F)->data

colnames(data)[1] <- "ID"
colnames(data)[2:10] <- paste("exp",1:9, sep = "_")
colnames(data)[11:19] <- paste("base", 1:9, sep = "_")

library(reshape)
data.m <- melt(data, id = "ID")
data.m <- cbind(data.m, colsplit(data.m$variable, "_", names = c("Source","Measure")))

data.m现在采用的格式是您真正想要的数据几乎所有内容。我不知道来自实验和基线的9个测量值中的每一个是否有意义或者可以进行有意义的比较,因此我将它们保持不同。

现在,您可以正确使用lattice

histogram(~value | Source + ID, data = data.m)

如果有意义地比较了测量值(即data[,2]data[,11]在某种程度上是“相同的”),您可以重新设定数据以直接将实验与基线进行比较

data.comp <- cast(data.m, ID + Measure ~ Source)  
## I know ggplot2 better
library(ggplot2)
qplot(base, exp, data = data.comp)+
  geom_abline()+
  expand_limits(x = 0, y = 0)

答案 1 :(得分:0)

这样的事情应该有效:

library(lattice)
data <- matrix(1:18, ncol=18, nrow=3, byrow=T)

for (i in 1:nrow(data))
    {
    tmp <- cbind(data[i,], rep(1:2, each=9))
    print(histogram(~tmp[,1]|tmp[,2]), split=c(1,i,1,nrow(data)), more=T)
    }

注意:这仅适用于少量数据行...对于较大的数据集,您可能需要考虑稍微不同的布局(更改split中的histogram参数)