2013-07-18 13 views
12

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

答えて

19

これらはあなたが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'を言う、それらを追加する必要はありません。

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

か、列がわからない場合

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

あなたは​​、またはdf$c[9]を使用して要素にアクセスすることができます。

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

1

これはおそらく最も簡単な方法です:それはおそらく、あなたがその行インデックスで行を選択したい場合は、あなたが簡単なブラケット表記

data[3,] 

vs. 

data[data$rownumber==3,] 

でこれを行うことができることは注目に値します

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

だから私は本当にこの新しいコラムが何を達成するのか分かりません。

+3

'dim(data)[1]'の代わりに 'nrow(data)'を使うことができます。 –

+2

rownamesは数字ではない文字です。それは混乱につながる可能性があります。 – Roland

+0

@Rolandその代替ソリューションを削除することをお勧めします。 –

6

は単に:

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

これは役に立ちそうな時があるとは思えません。特に 'which'関数を指定した場合 –

+1

ソートインデックスが必要な場合に便利です。 – Roland

+0

意味があります。 –