web-dev-qa-db-ja.com

Rの行番号の参照

観測の行番号を参照するにはどうすればよいですか?たとえば、「data」というdata.frameがあり、各観測の行番号に等しい変数data$rownumberを作成する場合、ループを使用せずにどのように実行しますか?

16
Michael

_data.frame_を作成すると、これらはデフォルトでrownamesとして存在します。

_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
_

rownamesコマンドを使用してそれらにアクセスできます。

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

数値として必要な場合は、as.numeric(rownames(df))のように_as.numeric_を追加して数値を強制します。

あなたが探しているものを知っているかのようにそれらを追加する必要はありません(例えば、アイテム_df$c == 'i'_、whichコマンドを使用できます:

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

または列がわからない場合

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

_df[9, 'c']_または_df$c[9]_を使用して要素にアクセスできます。

それらを追加したい場合は、df$rownumber <- as.numeric(rownames(df))を使用できますが、rownamesに割り当てられている場合があるため、これはdf$rownumber <- 1:nrow(df)よりも堅牢ではありません。デフォルトのインデックス番号ではなくなりました(rownamesに割り当てた場合でもwhichコマンドはインデックス番号を返し続けます)。

21
ricardo

単に:

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

これはおそらく最も簡単な方法です:

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

行インデックスで行を選択する場合は、単純なブラケット表記でこれを実行できることに注意してください。

data[3,]

vs.

data[data$rownumber==3,]

ですから、この新しいコラムが何を達成するのか、私にはよくわかりません。

1
David Marx