2013-07-18 11 views
12

Jak odwołać się do numeru wiersza obserwacji? Na przykład, jeśli masz data.frame o nazwie "dane" i chcesz utworzyć zmienną data$rownumber równą numerowi wiersza każdej obserwacji, w jaki sposób zrobiłbyś to bez użycia pętli?Odwołanie do numeru wiersza w R

Odpowiedz

19

Są obecne domyślnie jako rownames podczas tworzenia data.frame.

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 

i można uzyskać do nich dostęp za pomocą polecenia rownames.

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

jeśli trzeba je jako numery, po prostu zmusić do numeryczny dodając as.numeric, jak w as.numeric(rownames(df)).

Nie trzeba do nich dodać, a jeśli wiesz, czego szukasz (powiedzmy poz df$c == 'i', można użyć polecenia, które:

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

lub jeśli nie wiem kolumnę

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

może uzyskać dostęp do elementu za pomocą df[9, 'c'] lub df$c[9].

Jeśli chcesz dodać je można użyć df$rownumber <- as.numeric(rownames(df)), chociaż może być mniej odporny niż df$rownumber <- 1:nrow(df), ponieważ istnieją przypadki, w których mógłbyś przypisać do rownames, więc nie będą to już domyślne numery indeksów (które polecenie będzie kontynuować zwracanie numerów indeksów, nawet jeśli przypisałeś je do rownames).

1

Jest to prawdopodobnie najprostszy sposób:

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

To chyba warto zauważyć, że jeśli chcesz, aby wybrać wiersz o indeksie wiersza, można to zrobić za pomocą notacji prosty wspornik

data[3,] 

vs. 

data[data$rownumber==3,] 

Więc nie jestem pewien, co osiąga ta nowa kolumna.

+3

Możesz użyć 'nrow (dane)' zamiast 'dim (data) [1]'. –

+2

rownames to znaki, a nie cyfry. To może doprowadzić do zamieszania. – Roland

+0

@Roland Dobra uwaga, usunięcie tego alternatywnego rozwiązania. –

6

prostu:

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

Nie mogę wymyślić czasu, kiedy byłoby to przydatne. Zwłaszcza ze względu na funkcję 'który' –

+1

Jest to przydatne, jeśli potrzebujesz indeksu sortowania. – Roland

+0

To ma sens. –

Powiązane problemy