2016-04-29 7 views
-1

*** Um diese Frage zu stellen, habe ich in meinem Beispiel eine Zeitspalte entfernt, die in meinen tatsächlichen Daten vorhanden ist, die die tatsächliche Zeit enthält (mit verschiedenen Sekunden trotz gleicher nominaler Zeit)), was dazu führte, dass meine Daten eine Punktzahl pro Zeile aufwiesen. Wenn ich diese Zeiten rundete, löste ich mein Problem mit dcast :)R data.table cleaning - Zeilen nach mehrfachen Kriterien zusammenfassen

Ich versuche gerade, meine Daten aufzuräumen und ich laufe in einige Roadblocks (ich bin ein Anfänger zu R und mache die meisten meiner Erkenntnisse daraus Seite? ˅). Ich möchte meine Daten so transformieren, dass die Symptome in Spalten angezeigt werden, die sowohl auf der Übereinstimmung der Person als auch auf der Nominalzeit des Symptoms basieren. Durch diese Datenbereinigung werde ich meinen Datensatz von 64.000 Beobachtungen auf etwa 8.000 reduzieren. Meine Daten sieht derzeit wie folgt aus:

library(reshape2) 
WideSymptomData <- dcast(SymptomData,Person+Nominal.Time~Symptom.Name, value.var="Symptom.Score") 

Person Nominal.Time A B C 
1  +30   6     
1  +30    9   
1  +30     3  
2  +90   1    
2  +90    5   
2  +90     2  

Aber leider bin ich an diesem Punkt ratlos:

Person Nominal.Time Name   Score 
1  +30   A    6 
1  +30   B    9 
1  +30   C    3 
2  +90   A    1 
2  +90   B    5 
2  +90   C    2 

ich meine Daten in das folgende war in der Lage zu machen. Ich habe recherchiert und kann nicht scheinen, um herauszufinden, wie der nächste Schritt, dies zu tun, um schließlich zu erreichen:

Person Nominal.Time A B C 
1  +30   6 9 3     
2  +90   1 5 2   

Ich denke, das question könnte ähnlich wie ich, obwohl ich nicht in der Lage war, um erfolgreich die Anwendung Antworten dafür. Jede Anleitung wird sehr geschätzt, danke!

+0

'reshape (Daten, dir = 'breit', idvar = c ('Person', 'Nominal.Time'), timevar = 'Symptom.Name') ' – rawr

Antwort

2

Mit den folgenden Daten

SymptomData <- data.table(read.table(text="Person Nominal.Time Symptom.Name Symptom.Score 
1  +30   A    6 
1  +30   B    9 
1  +30   C    3 
2  +90   A    1 
2  +90   B    5 
2  +90   C    2", header=T, colClasses=c("numeric","character","character","numeric"))) 

Dies funktioniert gut

dcast(SymptomData, Person+Nominal.Time~Symptom.Name, value.var="Symptom.Score") 
# Person Nominal.Time A B C 
# 1  1   +30 6 9 3 
# 2  2   +90 1 5 2 

Getestet mit reshape2_1.4.1 und data.table_1.9.6. Stellen Sie sicher, dass Ihr Beispiel repräsentativ für Ihre realen Daten ist.

+0

Wenn ich diesen Code verwende, erhalte ich diese Nachricht" Verwenden von "Nominal.Time" als Wertspalte: Verwenden Sie value.var zum Überschreiben. " und die Spalten A, B, C des Symptoms sind mit Nominal.Time-Werten gefüllt, und ich bin immer noch mit vielen Zeilen konfrontiert, die Leerstellen (NAs) enthalten, wie ich in meinem ursprünglichen Beitrag beschrieben habe. – willz

+0

Sie könnten versuchen, value.var Parameter hinzuzufügen: dcast (SymptomData, Person + Nominal.Time ~ Symptom.Name, value.var = "Symptom.Score") –

+0

@willz können Sie die Versionsnummern der Pakete hinzufügen, die Sie sind benutzen? Und hast du mit den Daten oben getestet? Oder hatten Sie mehr Spalten oder etwas? – MrFlick