2010-12-13 8 views
52

Sagen wir folgende Datenrahmen haben:Get Spaltenindex von Etikett in einem Datenrahmen

> df 
    A B C 
1 1 2 3 
2 4 5 6 
3 7 8 9 

Wir können Spalte ‚B‘ aus dem Index wählen:

> df[,2] 
[1] 2 5 8 

Gibt es eine Möglichkeit zu den Index (2) von der Spaltenbezeichnung ('B') bekommen?

+2

Siehe Antwort hier der @ matthewdowle für die beste Lösung: http://stackoverflow.com/a/9277935/636656 –

Antwort

73

Sie den Index über grep und colnames bekommen:

grep("B", colnames(df)) 
[1] 2 

oder nur die Spalten "B" ohne diejenigen, die ein B zum Beispiel enthalten gecallt zu

grep("^B$", colnames(df)) 
[1] 2 

verwenden "ABC".

+1

könnten Ihr ursprüngliches Beispiels der Vorteile in Code demonstriert werden, wenn man wie seine Verwendung in etwas zeigt df [, grep ("^ B", Spaltennamen (df))], dh es werden die Datenrahmenspalten zurückgegeben, die mit "B" beginnen. Fühlen Sie sich frei, in einer weiteren Bearbeitung zu verwenden, wenn Sie zustimmen. –

+2

Oder sogar df [, grep ("^ [BC]", Spaltennamen (df))], dh die Spalten, die entweder mit B oder C beginnen. –

+0

@Dwin: Wie bereits erwähnt, möchte der Fragesteller den Index * *. Aber ich benutze auch normalerweise 'Grep', wie du es beschreibst. – Henrik

66

Im Folgenden wird es tun:

which(colnames(df)=="B") 
+2

Das Problem mit 'grep' ist auch der Vorteil, dass es reguläre Ausdrücke verwendet (so können Sie nach beliebigen Mustern in Ihren Spaltennamen suchen). Um nur die Spaltennamen "B" zu erhalten, benutzen Sie ''^B $ "' als Muster in grep.^ist das Metazeichen für den Anfang und $ für das Ende einer Zeichenkette. – Henrik

+6

Sie brauchen nicht einmal 'was'. Sie können direkt 'df [Namen (df) ==" B "]' – nico

+3

@nico verwenden Die Frage ist, den * Index * der Spalte zu bekommen. – NPE

5

ich alle Indizes für die COLNAMES sehen wollte, weil ich eine komplizierte column rearrangement tun musste, so druckte ich die COLNAMES als Datenrahmen. Die Rownames sind die Indizes.

as.data.frame(colnames(df)) 

1 A 
2 B 
3 C 
+0

Eine prägnantere Methode ist 'cbind (names (df))'. – lillemets

Verwandte Themen