2017-01-09 5 views
0

Ich bin sicher, dass dies eine dumme Frage, aber ich kann nicht herausfinden, was falschdata.frame in Matrix (R), rownames() dumme Fehler

ich eine data.frame habe („data.csv“) von 93 x 28 I in Matrix für weitere Plotten konvertieren wollen, sieht es wie folgt aus:

SYMBOL BT.20 CAL.51 MDA.MB.436 BT.549 
A 3.039 4.908 3.865 3.818 
B 4.349 5.399 6.071 5.313 
C 7.509 8.091 6.48 6.660 
D 3.429 4.394 3.622 3.873 
E 3.369 6.716 3.557 3.346 

der Code

data <- read_csv("data.csv") 
rnames <- data[,1]    # assign labels in column 1 to "rnames" 
mat_data <- data.matrix(data[,2:28]) # transform column 2 - end into a matrix 
rownames(mat_data) <- rnames     # assign row names 

produziert

Spalte 1 muß nicht doppelte Namen oder fehlende Werte

Dank im Voraus

edit: mit read.csv() statt, es funktioniert ganz gut

+2

Sie sollten Ihren Code debuggen. Fügen Sie 'print (rnames)' hinzu. – user31264

+1

oder Sie können das Ergebnis von 'str (rnames)' und 'str (mat_data)' posten. Scheint wie ein Dimensionsproblem – Bastien

+0

Haben Sie versucht 'read.csv (" data.csv ", row.names = 1)'? Es weist sie in 'read.csv' zu. –

Antwort

2

Der Fehler wird sagen, dass der Wert der zugeordnet wird roownames ist eine Liste und die "Länge" einer Liste mit einem einzelnen Vektor ist 1, nicht die Länge des Vektors. Ich kann nicht sagen, warum das so sein sollte, da das übliche Verhalten darin besteht, dass die "[" - Funktion einzelne Spalten in atomare Vektoren "löscht". Genau wie Sie, würde ich rnames erwartet ein Atomvektor der Länge 39 sein, aber es scheint, dass Sie diese brauchen stattdessen zu verwenden:

rownames(mat_data) <- unlist(rnames)    # assign row names 

Reiche und APOM haben bessere Augen als ich. Die Funktion read_csv erzeugt ein Objekt mit einer anderen Klasse und zugehöriger Extraktionsfunktion als read.csv. Da Sie in der „hadleyverse“ sind, deshalb sollten Sie diese verwenden:

rnames <- data[[1]] 

Die tibble -classed Objekte eine andere Version des [ -function haben als data.frames tun. Die [[-Funktion scheint für beide Klassen gleich zu funktionieren.

+0

Kann durch die Verwendung von 'tibble' oder' dplyr' verursacht werden: 'as_tibble (mtcars) [, 1]' ist ein tibble, kein Vektor. 'tibble'" korrigiert "das' drop = TRUE' Standardverhalten von '" ["()' –

+0

Wenn das wahr ist, dann würde "unlist" funktionieren, aber es könnte unnötig gemacht werden, indem 'rnames <- data [[1]] verwendet wird 'als die Erstellung von' rnames ', da' "[[" "" "" die Dimensionen "fallen lässt". –

+0

danke eine Million Jungs –