2012-04-03 10 views
9

Ich muss ein data.frame erstellen, das Zeile für Zeile von Ergebnissen einer for-Schleife aufgefüllt wird. Es hat 45 Spalten: Die Namen von fünf davon sind statisch, aber der Rest wird zur Laufzeit aus einer externen CSV-Datei (als Vektor) eingelesen. Ich suche nach etwas entlang der Linien vonErstellen Sie ein data.frame in R mit dynamisch zugewiesenen Spaltennamen

goalsMenu <- read.csv("Phase 1 goalsmenu.csv", header = TRUE) 
colHeads <- c("analysis","patient","date",as.vector(goalsMenu$Name),"CR") 
output <- data.frame(colHeads) 

aber dies schafft eine einspaltige data.frame mit Spaltennamen von colHeads.

colHeads <- list("analysis","patient","date",as.vector(goalsMenu$Name),"CR") 

ein Schritt in die richtige Richtung scheint, aber ich muss „abzuflachen“ es die gewünschte data.frame Struktur

könnten Sie bitte raten zu schaffen?

+0

Welche Klasse muss jede Spalte sein? – mdsumner

Antwort

8

Does hilft?

goalsMenu <- paste("Name", 1:40, sep="") 
output <- as.data.frame(matrix(rep(0, 5 + length(goalsMenu)), nrow=1)) 
names(output) <- c("analysis", "patient", "date", goalsMenu, "CR1", "CR2") 

Grundsätzlich erstelle ich einen data.frame output mit der Anzahl der Spalten ersten und die Spalten im nächsten Schritt benennen. Beachten Sie jedoch den Kommentar von mdsumner! Auf diese Weise sind alle Spalten der Klasse numeric. Sie können jedoch später damit umgehen: change the class of columns in data.frame

+0

Danke - das hat geklappt (obwohl die erste Null-Zeile danach wieder entfernt werden muss). Mit der Ausnahme (wie Sie erwarten würden) des Datums sind alle Spalten numerisch (die ersten beiden ganzzahligen Referenznummern; der Rest alle float) –

+0

@RobForsyth Da Sie gesagt haben, dass Sie sowieso Zeilen durchschleifen, um dieses data.frame zu füllen, I Ich denke, Sie müssen nur mit der ersten Zeile beginnen und die Nullen dort ersetzen. Außerdem sollte dies die Spaltenklasse automatisch überschreiben. Ist deine Frage dann beantwortet? Oder suchen Sie etwas anderes? Für den Fall, dass es Ersteres ist, wäre es gut, wenn Sie meine oder Allans Antwort akzeptieren würden, also ist diese von der Liste. Sonst wäre es super, wenn du mehr Details geben könntest und ich könnte es noch einmal versuchen ;-) Oder vielleicht hat jemand anderes eine bessere Lösung (ich denke es gibt einen). –

+0

Entschuldigung - Neu bei Stackoverflow Etikette! Jetzt markiert beantwortet: Danke nochmal! –

5

Wenn Sie den Rahmen zuerst mit (einigen) Daten füllen können, dann können Sie einfach Namen zuweisen(). Andernfalls müssen Sie die Liste zuerst machen müssen (und dann später zu data.frame konvertieren):

col.names <- LETTERS[1:10] # Example column names 
data <- vector("list", length(col.names)) 
names(data) <- col.names 
print(str(data))   # Inspect the structure 

Hope this diese Hilfe

Verwandte Themen