2013-04-19 6 views
5

Ich versuche, ein Sequenzobjekt mit seqdef im SPELL-Format zu erstellen. Hier ist ein Beispiel meiner Daten:Erstellen eines Sequenzobjekts aus SPELL-Daten

spell <- structure(list(ID = c(1, 3, 3, 4, 5, 5, 6, 8, 9, 10, 11, 11, 
12, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 
15, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 
19), status = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 2, 3, 1, 2, 3, 2, 3, 1, 1, 1, 3, 1, 3, 3, 1, 3, 1, 1, 1, 
1, 1, 3, 3, 1, 3, 1, 1, 1), time1 = c(1, 1, 57, 1, 1, 91, 1, 
1, 1, 1, 1, 104, 1, 1, 60, 109, 121, 1, 42, 47, 54, 64, 72, 78, 
85, 116, 1, 29, 39, 69, 74, 78, 88, 1, 16, 40, 68, 1, 30, 123, 
1, 39, 51, 1, 61), time2 = c(125, 57, 125, 125, 91, 125, 125, 
125, 125, 125, 104, 125, 125, 60, 109, 121, 125, 42, 47, 54, 
64, 72, 78, 85, 116, 125, 29, 39, 69, 74, 78, 88, 125, 16, 40, 
68, 125, 30, 123, 125, 39, 51, 125, 61, 125)), .Names = c("ID", 
"status", "time1", "time2"), row.names = c(NA, 45L), class = "data.frame") 

Wenn ich versuche, das Sequenzobjekt zu definieren, ein seltsamer Fehler ausgelöst:

spell.seq <- seqdef(data=spell, informat="SPELL", id="ID", begin="time1", end="time2", 
        status="status", limit=125,process=FALSE) 

[>] time axis: 1 -> 125 
[>] SPELL data converted into 17 STS sequences 
[>] 3 distinct states appear in the data: 
    1 = 1 
    2 = 2 
    3 = 3 
[>] state coding: 
     [alphabet] [label] [long label] 
    1 1   1  1 
    2 2   2  2 
    3 3   3  3 
[>] 17 sequences in the data set 
[>] min/max sequence length: 125/125 
Error in `row.names<-.data.frame`(`*tmp*`, value = value) : 
    invalid 'row.names' length 

Allerdings, wenn ich das gleiche tue indirekt über seqformat, die Erhaltung der Die gleichen Argumente, kein Fehler wird ausgelöst:

sts <- seqformat(data=spell,from="SPELL",to="STS", 
       id="ID",begin="time1",end="time2",status="status", 
       limit=125,process=FALSE) 

seqs <- seqdef(sts,right="DEL") 

Verwenden von TraMineR 1.8-5 mit R 3.0.0 Windows 7 64-Bit. Ist das ein Fehler oder mache ich etwas falsch? Danke im Voraus.

+1

Vielen Dank für den detaillierten Fehlerbericht (ja, es ist ein Fehler). Ich habe auch bemerkt, dass der erste Anruf nicht die richtige Anzahl von Sequenzen gibt. Im Moment benutzen Sie bitte seqformat separat. –

+0

@MatthiasStuder Versehentlich eingefügt die Ergebnisse aus den Hauptdaten, nicht das Beispiel. Bearbeitet. Der Fehler bleibt natürlich bestehen. –

+0

@MatthiasStuder Ich schaute auf die aufgelisteten Fehlerberichte und sah dies nicht referenziert, so dass Sie aktualisieren ... Dies kann kein Fehler sein, da die Dokumentation ziemlich spezifisch ist (wie in der Antwort unten zitiert). – Thell

Antwort

4

Ein kurzer Blick auf die Quelle seqdef() für die Einstellung row.names zeigt, dass sie basierend auf dem Wert des Arguments id festgelegt sind.

Blick in ?seqdef für id zeigt

id
optionales Argument für die rownames des Sequenzobjekt zu setzen. Wenn NULL (Standard), werden die Rownames aus den Eingabedaten übernommen. Wenn "auto" eingestellt ist, werden die Sequenzen von 1 bis zur Anzahl der Sequenzen nummeriert. Ein Vektor von rownames mit einer Länge gleich der Anzahl von Sequenzen kann ebenso spezifiziert werden.

Aus dem Beispiel in der Frage übergeben Sie id="ID", die diese Kriterien nicht erfüllt. Wenn Sie dies auf id=NULL ändern, kann der Befehl wie erwartet abgeschlossen werden, und eine Überprüfung auf Gleichheit mithilfe von identical(spell.seq, seqs) ergibt true.

Verwandte Themen