2012-12-21 21 views
8

Ich bin sehr neu in R, also entschuldige mich für eine Frage wahrscheinlich dumm.Wie zeichnet man eine mehrspaltige CSV-Datei?

Ich habe eine mehrspaltige CSV-Datei (einfache kommagetrennte, keine Anführungszeichen), wobei die erste Zeile die Kopfzeile ist, die erste Spalte ist ein zusammenhängender ganzzahliger Index und die anderen 17 Spalten sind Gleitkommawerte der Funktionen .

Die Aufgabe besteht darin, alle 17 Linien auf demselben Diagramm (mit den gleichen Achsen) zu zeichnen.

Klingt sehr einfach, ist aber nicht wirklich sehr offensichtlich zu tun.

Antwort

2

Sie können read.csv verwenden, um die Daten als data.frame einzugeben. Dann haben Sie viele Möglichkeiten zum Plotten. Ich bevorzuge lattice für die meisten investigativen Arbeiten.

Zwei im Gitter. Hier erstelle ich zufällige Daten zum Chart.

library(lattice) 
d <- data.frame(index=1:20, x=rnorm(20), y=rnorm(20)) 

> head(d, n=3) 
    index   x   y 
1  1 -1.065591 0.2422635 
2  2 -1.563782 -1.4250984 
3  3 1.156537 0.3659411 

xyplot(x+y~index, data=d, type='l', auto.key=list(space='right')) 

Sie können die Formel aus den Namen der Spalten generieren. Ich normalerweise nicht tun dies aus der Aufforderung, sondern verwenden solche Konstrukte in Code:

f <- paste(paste(names(d[,-1,drop=FALSE]), collapse="+"), 
      names(d[,1,drop=FALSE]), 
      sep=" ~ ") 

xyplot(as.formula(f), data=d, type='l', auto.key=list(space='right')) 

Wie in Bens Antwort, type='l' gibt Linien. Der Standardwert ist type='p' für Punkte. Ich habe den Parameter auto.key hier hinzugefügt, um die Serie zu beschriften.

enter image description here

+0

Nachdem ich meine Daten mit 'd <- read.table (" mytable.csv ")' 'geladen habe und den Befehl' head (d, n = 3) 'ausgegeben habe, wird die Kopfzeile mit einem großen Offset angezeigt leer und soll nach rechts gescrollt werden, um den eigentlichen Header zu sehen. Wenn ich den Befehl 'xyplot (x + y ~ index, data = d, type =' l ') 'ausfühle, wird' Error in eval (expr, envir, enclos): object 'x' nicht gefunden 'angezeigt. Aber Bens Lösung funktioniert mit der gleichen Datei und Ihr Beispiel mit zufälligen Daten funktioniert auch. – Ivan

+0

In meinem Beispiel sind 'x' und' y' die Namen der Spalten im Datenrahmen. Sie müssten die tatsächlichen Spaltennamen verwenden. Ich hätte 'read.csv' angeben sollen, da es die korrekten Standardwerte (header = TRUE, sep =", ") für Sie bereitstellt. Ich werde bearbeiten, um dies zu reflektieren. Welche Spaltennamen haben Sie in Ihren Daten? –

+0

Ich habe es geschafft zu arbeiten, danke. – Ivan

18

wohl kompakteste, Basis-R-Lösung ist nur

mydata <- read.csv("mydatafile.csv") 
matplot(mydata[, 1], mydata[, -1], type="l") 
  • header=TRUE ist eine Standardoption read.csv(), so dass Sie die Existenz der nicht angeben müssen Headerzeile explizit
  • mydata[, 1] wählt die erste Spalte aus; mydata[, -1] wählt alle außer die erste Spalte
  • type="l" wählt Linien (der Standardwert ist Punkte); siehe ?matplot, ?plot Einzelheiten der Änderung Linientypen, Farben, etc etc etc ...

Sobald Sie wissen, dass matplot nützlich ist, dass Sie für andere Stackoverflow Beispiele suchen, zum Beispiel How to draw multiple Lines from csv in R

+3

Danke, @ ben-bolker, deine Antwort ist großartig und löst mein Problem. Ich hoffe, es macht dir nichts aus, wenn ich die Antwort von Matthew akzeptiere, da es auch das Problem löst, denn Matthew hat noch viel weniger Ansehenspunkte. – Ivan

+2

kein Problem .... –

Verwandte Themen