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?
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
).
Simplement:
data$rownumber = 1:nrow(Data)
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.