2

このようなデータ フレームがあります (数千倍も大きいですが)。

df<-data.frame(sample(1:100,10,replace=F),sample(1:100,10,replace=F),runif(10,0,1),runif(10,0,1),runif(10,0,1), rep(c("none","summer","winter","sping","allyear"),2))
names(df)<-c("Mother","ID","Wavelength1","Wavelength2","Wavelength3","WaterTreatment")
df
   Mother ID Wavelength1 Wavelength2 Wavelength3 WaterTreatment
1       2 34   0.9143670  0.03077356  0.82859497           none
2      24 75   0.6173382  0.05958151  0.66552338         summer
3      62 77   0.2655572  0.63731302  0.30267893         winter
4      30 98   0.9823510  0.45690437  0.40818031          sping
5       4 11   0.7503750  0.93737900  0.24909228        allyear
6      55 76   0.6451885  0.60138475  0.86044856           none
7      97 21   0.5711019  0.99732068  0.04706894         summer
8      87 14   0.7699293  0.81617911  0.18940531         winter
9      92 30   0.5855559  0.70152698  0.73375917          sping
10     93 44   0.1040359  0.85259166  0.37882469        allyear

y 軸に波長値をプロットし、x 軸に波長をプロットします。これを行うには2つの方法があります。

機能する最初の方法ですが、基本プロットを使用し、必要以上のコードが必要です。

colors=c("red","blue","green","orange","yellow")
plot(0,0,xlim=c(1,3),ylim=c(0,1),type="l")
for (i in 1:10) {
  if      (df$WaterTreatment[i]=="none"){
    a<-1
  } else if (df$WaterTreatment[i]=="allyear") {
    a<-2
  }else if (df$WaterTreatment[i]=="summer") {
    a<-3
  }else if (df$WaterTreatment[i]=="winter") {
    a<-4
  }else if (df$WaterTreatment[i]=="spring") {
    a<-5
  }
  lines(seq(1,3,1),df[i,3:5],type="l",col=colors[a])
}

2 番目の方法: データを溶かして長い形式にしてから、ggplot2 を使用します。各 "Mother" "ID" (一意の識別子、元のデータ フレームの行) の行ではなく、各水処理の行があるため、生成されるプロットは正しくありません。

require(reshape2)
require(data.table)
df_m<-melt(df,id.var=c("Mother","ID","WaterTreatment"))
df_m$variable<-as.numeric(df_m$variable)  #sets wavelengths to numeric
qplot(x=df_m$variable,y=df_m$value,data=df_m,color=df_m$WaterTreatment,geom = 'line')

おそらく、線のプロットを修正するggplot2について欠けている簡単なものがあります。私は ggplot の初心者ですが、それに慣れるために取り組んでおり、このアプリケーションで使用したいと考えています。

しかし、もっと広く言えば、このタイプのワイドフォームデータをggplot2で効率的にプロットする方法はありますか? データの変換/溶解にかかる時間は膨大であり、それだけの価値があるかどうか、または溶解時に作成された冗長なセルを排除できる何らかの回避策があるかどうか疑問に思っています.

ご協力いただきありがとうございます。この質問をより明確にする必要がある場合はお知らせください。編集できます。

4

2 に答える 2