1

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

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)

在此示例中,“ind”列具有更多级别,并且它们的长度并不总是相同(这里每个人都有 4 个级别,但实际上有些人有数千行数据,而其他人只有几行)。

我想做的是有一个外部循环或函数,它将从每个人(“ind”)中选择所有行,并使用深度/小时列生成一个箱线图。

这是我心中的想法,

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)

我意识到这个循环可能不合适,但我仍在学习。我可以一次为每个人绘制箱线图,但我想要一种更快、更有效的方式来为每个人选择数据并创建或存储箱线图结果。当我有更多人时(而不是一次做一个......),这将非常有用。提前非常感谢。

4

1 回答 1

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的每组案例运行一个。包装器只是使用于 的输出束不会写入控制台。dfby df$indinvisibleboxplot

于 2012-12-12T01:37:46.637 回答