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)

このループは不適切かもしれないと気付きましたが、まだ学習中です。一度に各個人の箱ひげ図を実行できますが、各個人のデータを選択し、箱ひげ図の結果を作成または保存するためのより高速で効率的な方法が必要です。これは、(一度に 1 つずつ行うのではなく) もっと多くの個人がいる場合に非常に役立ちます。よろしくお願いします。

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)")
    )
)

いくつかの説明を提供するために、これはdefinedboxplot内のケースのグループごとに を実行します。ラッパーは、に使用される一連の出力がコンソールに書き込まれないようにするだけです。dfby df$indinvisibleboxplot

于 2012-12-12T01:37:46.637 に答える