2014-10-01 164 views
26

Ich versuche, einen Plot aus Elementen der CSV-Datei zu erstellen, die wie folgt aussieht:Argumente implizieren unterschiedliche Anzahl der Zeilen: 8, 20

h1,h2,h3,h4 
a,1,0,1,0 
b,1,1,0,1 
c,0,0,1,0 

ich den folgenden Code versucht, aber einen Fehler erhalten sagen

Error in data.frame(id = varieties, attr(mat, "row.names"), check.rows = FALSE) : 
    arguments imply differing number of rows: 8, 20 

Meine Beispieldaten haben 8 Spalten und 20 Zeilen (ohne Kopf- und Zeilennamen). Ich habe versucht, online nachzusehen, und habe versucht, ein paar Fixes zu implementieren, aber das Problem besteht immer noch. Ich würde jede Hilfe sehr schätzen.

mat <- read.csv("trial.csv", header=T, row.names=1) 
varieties = names(mat) 
df <- data.frame(id=varieties,attr(mat, "row.names"), check.rows= FALSE) 
+0

Welche Zeile wirft den Fehler auf? Können Sie das Skript Zeile für Zeile ausführen und die Ergebnisse melden? Ist es möglich, die Datei zu teilen? –

+0

@MylesBaker 'df <- data.frame (id = Varietäten, attr (mat, "row.names"), check.rows = FALSE)' gibt den Fehler an. – abn

+1

Dies funktioniert nur, wenn 'mat' eine quadratische Matrix ist (nrows = ncols). Was willst du erreichen? Vielleicht ist eine "Liste" besser für Ihre Bedürfnisse geeignet ... Oder sehen Sie 'cbind.fill' [hier] (http://stackoverflow.com/questions/7962267/cbind-a-df-with-an-empty-df) -cbind-fill) – EDi

Antwort

23

Ihre data.frame mat ist rechteckig (n_rows! = N_cols).

Daher können Sie keinen data.frame aus den Spalten- und Rownames machen, da jede Spalte in einem dat.frame dieselbe Länge haben muss.

Vielleicht genügt Ihre Bedürfnisse:

require(reshape2) 
mat$id <- rownames(mat) 
melt(mat) 
6

Ich hatte die gleiche Fehlermeldung, damit ich ein wenig ging googeln ich es mit dem folgenden Code zu beheben verwaltet.

df<-data.frame(words = unlist(words)) 

Wörter ist eine Zeichenliste.

Nur für den Fall, dass jemand anders die Ausgabe als Datenframe benötigt.

Verwandte Themen