从列(数据框)中选择匹配的行值以使用R中的循环创建绘图

时间:2012-12-12 01:15:54

标签: r function loops match boxplot

我有一组看起来像这样的数据,

species<-"ABC"
ind<-rep(1:4,each=24)
hour<-rep(seq(0,23,by=1),4)
depth<-runif(length(ind),1,50)

df<-data.frame(cbind(species,ind,hour,depth))
df$depth<-as.numeric(df$depth)

在这个例子中,列&#34; ind&#34;有更多的级别,他们不总是相同的长度(这里每个人有4个级别,但实际上有些人有数千行数据,而其他只有几行)。

我想要做的是设置一个外部循环或函数来选择每个人的所有行(&#34; ind&#34;)并使用深度/小时列生成一个箱线图。

这是我想到的想法,

for (i in 1:length(unique(df$ind))){

  data<-df[df$ind==df$ind[i],]
  individual[i]<-data

  plot.boxplot<-function(data){
  boxplot(depth~hour,dat=data,xlab="Hour of day",ylab="Depth (m)")

  }

}

par(mfrow=c(2,2),mar=c(5,4,3,1))
plot.boxplot(individual)

我意识到这个循环可能不合适,但我还在学习。我可以一次为每个人做箱形图,但我想更快,更有效地为每个人选择数据并创建或存储箱图结果。当我有更多的人(而不是一次做一个人)时,这将非常有用。非常感谢。

1 个答案:

答案 0 :(得分:2)

这样的事情怎么样?

par(mfrow=c(2,2))
invisible(
  by(df,df$ind,
    function(x)
      boxplot(depth~hour,data=x,xlab="Hour of day",ylab="Depth (m)")
    )
)

为了提供一些解释,这会针对boxplot定义df by中的每组案例运行df$indinvisible包装器只是使得boxplot使用的一堆输出不会写入控制台。