web-dev-qa-db-fra.com

Référence du numéro de ligne dans R

Comment référencer le numéro de ligne d'une observation? Par exemple, si vous avez un data.frame appelé "données" et voulez créer une variable data$rownumber égale au numéro de ligne de chaque observation, comment le feriez-vous sans utiliser de boucle?

13
Michael

Celles-ci sont présentes par défaut sous la forme rownames lorsque vous créez un 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

et vous pouvez y accéder via la commande rownames

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

si vous en avez besoin sous forme de chiffres, il vous suffit de contraindre numérique en ajoutant as.numeric, comme dans as.numeric(rownames(df))

Vous n'avez pas besoin de les ajouter, car si vous savez ce que vous recherchez (par exemple, item df$c == 'i', vous pouvez utiliser la commande quelle:

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

ou si vous ne connaissez pas la colonne

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

vous pouvez accéder à l'élément en utilisant df[9, 'c'] ou df$c[9]

Si vous voulez les ajouter, vous pouvez utiliser df$rownumber <- as.numeric(rownames(df)), bien que cela soit peut-être moins robuste que df$rownumber <- 1:nrow(df), car il peut arriver que vous ayez assigné à rownames afin qu'ils ne soient plus les numéros d'index par défaut (la commande qui continuera à renvoyer les numéros d'index même si vous attribuez à rownames). 

21
ricardo

Simplement: 

data$rownumber = 1:nrow(Data)
7
Señor O

C'est probablement le moyen le plus simple:

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

Il est probablement intéressant de noter que si vous souhaitez sélectionner une ligne à l'aide de son index, vous pouvez le faire avec une simple notation

data[3,]

vs.

data[data$rownumber==3,]

Je ne suis donc pas vraiment sûr de ce que cette nouvelle colonne accomplit.

1
David Marx