0

mylist というデータ フレームのリストがあります。リストのヘッダーは人の名前で、データ フレームにはそれらの名前に関連付けられたデータ (日付、身長、体重など) を含む列が含まれます。

names(mylist[1])
[1] "John"
names(mylist[2])
[1] "Susan"


mylist[[1]]
[1] name  date hight weight ....
    John  1950 1.81  78
    John  1948 1.60  60
    John  1935 1.50  55

mylist[[2]]
[1] name  date hight weight ....
    Susan 1985 1.40  40    .
    Susan 1995 1.45  60
    Susan 1990 1.25  40

各メトリックのボックスプロットを作成したい: 身長のボックスプロット、体重のボックスプロットなど。そして、各メトリックのボックスプロットにすべての人の情報を含めたい。たとえば、ジョン、スーザンなどの情報を含む高さのボックス プロットが必要です。

これがループの試みですが、機能していません。

for(s in 3:21) {
boxplot(x=for(i in 1:99){ mylist[[i]][s]}))
}

こんにちは、私は nograpes ソリューションを適用しました。ただし、彼が提案したコード:

ggplot(melted.df,aes(x=name,y=value)) + 
geom_boxplot() + facet_grid(variable~.,scales='free')

各箱ひげ図を互いに積み重ね、最終的に16個の箱ひげ図があるため、プロットを読み取ることができません。したがって、メトリクスごとに 1 つずつ、16 の異なる箱ひげ図を作成することをお勧めします。

私はこれに対する解決策を探していました.1つはこのコードを実行することです:

tomelt<-data.frame(c(daily[1],daily[2],daily[3])) #create a data.frame with variable   name, date and the variable to be ploted. 

melted.df<-melt(tomelt,id.vars=c('name', 'date')) #convert to long form 
ggplot(melted.df,aes(x=name,y=value)) + geom_boxplot() #plot 

16回、データフレームの別のメトリック(列)を呼び出すようにコードを変更するたびに...しかし、明らかにこれはまったく効率的ではありません。

これを行うための for ループを作成する方法について何か考えはありますか?

4

2 に答える 2

1

あなたがここで見逃しているように見えることがたくさんあります。まず、16 のメトリクスと 50,000 の観測があり、1 人あたり 10 の観測がある場合、80,000 の箱ひげ図が得られるようです。おそらく、最初の数人か何かだけに興味があったのでしょう。

forループについて学ぶことはたくさんあります。R に関するガイドを必ず手に取り、最初にいくつかの基本的なことを試してみてください。

for ループでは、次のようなことを意図していたと思います。

for(s in 3:ncol(mylist[[1]])) { 
  for(i in 1:length(mylist)){ 
    boxplot(mylist[[i]][s])
  }
}

しかし、それでもうまくいかず、各プロットが最後のプロットを上書きするため、 でグリッドに配置する必要がありますpar(mfrow=c(num.rows,num.cols))。しかし、もっと良い選択肢があります。?boxplot特に例を参照してください。あなたの状況に当てはまる例はたくさんあります。また、考慮してggplot2ください。たとえば、次のコードを試してみてください。これにより、for ループを使用せずにデータが行と列にきれいにプロットされます。

# Stick your list together.
one.df<-do.call(rbind,mylist)
# Convert to "long-form".
library(reshape)
melted.df<-melt(one.df,id.vars=c('name','date'))
# Plot with ggplot2
ggplot(melted.df,aes(x=name,y=value)) + 
geom_boxplot() + facet_grid(variable~.,scales='free')

ここに画像の説明を入力

于 2013-09-22T02:49:49.063 に答える