2012-12-07 22 views
5

1つまたは2つのグループ変数を使用して多数のサブグラフを作成するために "by"を使用しようとしています。両方のグループ変数は因子変数である(性別はダミーであり、父親の社会的地位は複数のレベルを持つ)。凡例またはグラフのタイトルにグループのレベル(別名)を追加するにはどうすればよいですか?"by"を使用して複数のグラフタイトルを作成する

これは私が使用しているコードです。

library(TraMineR) 
library(Hmisc) 
data(biofam) 
biofam.lab <- c("Parent", "Left", "Married", "Left+Marr", 
      "Child", "Left+Child", "Left+Marr+Child", "Divorced") 
biofam.seq <- seqdef(biofam, 10:25, labels=biofam.lab) 

class(biofam$sex) 
levels(biofam$sex) 
describe(biofam$sex) 

class(biofam$cspfaj) 
levels(biofam$cspfaj) 
describe(biofam$cspfaj) 

### Simple plots 
seqdplot(biofam.seq) 
seqdplot(biofam.seq, group=biofam$sex, title="Marital status by gender") 

### Plot with automatic title using "by" 
by(biofam.seq, biofam$sex, function(X) seqdplot(X, title="X$sex[1]")) 
by(biofam.seq, biofam$sex, function(X) seqdplot(X, title=X$sex[1])) 

### Plot with automatic title and multiple-grouping using "for" 
for(n in c(1, 2, 3)) { 
    seqdplot(subset(biofam.seq, subset=biofam$cspfaj==(n)), title="(n)") 
} 
for(n in c(1, 2, 3)) { 
    seqdplot(subset(biofam.seq, subset=biofam$cspfaj==(n)), group=biofam$sex, title="(n)") 
} 
+1

切り取りと貼り付けが可能なコードを投稿してください。そのページにdata.frameというデータオブジェクトはありません。 –

+0

おそらく、私のサンプルコードは私の質問をより明確にしています。 –

+0

はい、より明確ですが、forループ内の 'seqdplot'呼び出しでエラーが発生します。 –

答えて

2

seqdplot機能を使用すると、グループの引数を使用するために自動的にそれを行うことができます。

seqdplot(seqobject, group=data.frame$group) 

ここで、seqobjectはseqdef関数で作成されたオブジェクトです。

+0

本当に素晴らしい機能ですが、2つ(またはそれ以上)のグループ化変数を使用したいので、それを "by"または "for"と組み合わせたい第2のグループ化変数の新しいレベルごとに新しいグラフを生成する。 –

+0

複数のグループ化変数が必要な場合は、 "interaction"関数を使用できます。seqdplot(seqobject、group = interaction(data.frame $ group1、data.frame $ group2、...)) –

2

あなたはfunction(X)としてdata.frameのサブセットを渡すことで、関数の引数を調整することができます。

by(data.frame, data.frame$group, function(X) seqdplot(X, title=X$group[1])) 
+0

タイトルに文字列入力が必要なようです。変数のレベルを使用しているときに、 "X $ group [1]"を文字列として入力するにはどうすればよいですか? –

+0

'by'で2つの異なるオブジェクトを使用しているようです。最初のオブジェクトだけが 'function(X)'に渡されることを覚えておいてください –

関連する問題