2013-07-18 4 views
12

Wie referenziere ich die Zeilennummer einer Beobachtung? Wenn Sie zum Beispiel eine data.frame namens "data" haben und eine Variable data$rownumber erstellen möchten, die der Zeilennummer jeder Beobachtung entspricht, wie würden Sie das tun, ohne eine Schleife zu verwenden?Referenznummer in R

Antwort

19

Diese sind standardmäßig vorhanden wie rownames, wenn Sie eine data.frame erstellen.

R> df = data.frame('a' = rnorm(10), 'b' = runif(10), 'c' = letters[1:10]) 
R> df 
      a   b c 
1 0.3336944 0.39746731 a 
2 -0.2334404 0.12242856 b 
3 1.4886706 0.07984085 c 
4 -1.4853724 0.83163342 d 
5 0.7291344 0.10981827 e 
6 0.1786753 0.47401690 f 
7 -0.9173701 0.73992239 g 
8 0.7805941 0.91925413 h 
9 0.2469860 0.87979229 i 
10 1.2810961 0.53289335 j 

und Sie können sie über den rownames Befehl zugreifen.

R> rownames(df) 
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" 

wenn Sie sie benötigen als Zahlen, einfach zu numerischen coerce durch as.numeric Zugabe, wie in as.numeric(rownames(df)).

Sie müssen sie nicht hinzufügen, als ob Sie wissen, was Sie suchen, (sagen Artikel df$c == 'i', können Sie die, die Befehl:

R> which(df$c =='i') 
[1] 9 

oder wenn Sie nicht wissen, die Spalte

R> which(df == 'i', arr.ind=T) 
    row col 
[1,] 9 3 

können Sie das Element zugreifen df[9, 'c'] verwenden oder df$c[9].

Wenn Sie sie hinzufügen wollten könnten Sie 012.319.227 verwenden, obwohl dies weniger robust sein kann als df$rownumber <- 1:nrow(df), da es Fälle gibt, in denen Sie möglicherweise rownames zugewiesen haben, so dass sie nicht mehr die Standardindexnummern sind (der Befehl gibt weiterhin Indexnummern zurück, selbst wenn Sie rownames zuweisen).

1

Dies ist wahrscheinlich der einfachste Weg:

data$rownumber = 1:dim(data)[1] 

Es wahrscheinlich, dass erwähnenswert ist, wenn Sie eine Reihe von ihrer Zeilenindex auswählen möchten, können Sie dies mit einer einfachen Klammer-Notation

tun können
data[3,] 

vs. 

data[data$rownumber==3,] 

Ich bin mir also nicht wirklich sicher, was diese neue Kolumne leistet.

+3

Sie können 'nrow (data)' anstelle von 'dim (data) [1]' verwenden. –

+2

rownames sind Zeichen nicht numerisch. Das könnte zu Verwirrung führen. – Roland

+0

@Roland Guter Punkt, diese alternative Lösung entfernend. –

6

einfach:

data$rownumber = 1:nrow(Data) 
+0

Ich kann mir keine Zeit vorstellen, in der das nützlich wäre. Vor allem mit der Funktion 'which' –

+1

Es ist nützlich, wenn Sie einen Sortierindex benötigen. – Roland

+0

Das macht Sinn. –