2012-12-07 14 views
5

Próbuję użyć "by" z "dla", aby utworzyć wiele podgraphów przy użyciu jednej lub dwóch zmiennych grupowych. Obie zmienne grupowe są zmiennymi czynnikowymi (płeć jest obojętna, a status społeczny ojca ma wiele poziomów). Jak mogę dodać poziom (nazwę) grupy w legendzie lub tytuł wykresów?Używanie "by" do tworzenia wielu tytułów wykresów

To jest kod, którego używam.

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

Proszę napisać kod, który można wyciąć i wkleić i poda przykład do pracy. Na tej stronie nie ma obiektu danych o nazwie data.frame. –

+0

Być może mój przykładowy kod sprawia, że ​​moje pytanie staje się bardziej przejrzyste. –

+0

Tak, to jest bardziej jasne, chociaż pojawia się błąd z wywołaniem 'seqdplot' w pętli for. (Indeks pomocniczy poza granicami ... jest tym, co widzisz?) –

Odpowiedz

2

Funkcja seqdplot może to zrobić automatycznie dla Ciebie używając argumentu Grupa:

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

Gdzie seqobject jest obiektem utworzonym za pomocą funkcji seqdef.

+0

Bardzo dobra funkcja, ale chcę użyć dwóch (lub więcej) zmiennych grupujących, dlatego chcę połączyć go z" by "lub" dla "w kolejność tworzenia nowych wykresów dla każdego nowego poziomu drugiej zmiennej grupującej. –

+0

Jeśli potrzebujesz wielu zmiennych grupujących, możesz użyć funkcji "interakcji": seqdplot (seqobject, group = interaction (data.frame $ group1, data.frame $ group2, ...)) –

2

można regulować argumentów funkcji przez przepuszczenie podzbiór data.frame jak function(X):

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

Tytuł wydaje się wymagać wprowadzenia łańcucha. Jak mogę wpisać "X $ group [1]" jako ciąg, a jednocześnie używać poziomu zmiennej? –

+0

Wygląda na to, że używasz dwóch różnych obiektów w 'by'. Pamiętaj tylko, że pierwszy obiekt zostanie przekazany do funkcji (X) ' –

Powiązane problemy