web-dev-qa-db-ja.com

Rで行インデックス番号を取得するにはどうすればよいですか?

Rにリストまたはデータフレームがあり、行インデックスを取得したい場合、どうすればよいですか?つまり、特定のマトリックスが何行で構成されているかを知りたいのです。

52

私はあなたの質問を行番号の取得に関するものと解釈しています。

  • 行名を設定していない場合は、as.numeric(rownames(df))を試すことができます。それ以外の場合は、1:nrow(df)のシーケンスを使用します。
  • which()関数は、TRUE/FALSE行インデックスを行番号に変換します。
72
Shane

正確に何をしようとしているのかは明確ではありません。

データフレームの行を参照するには、df[row,]を使用します

何かのベクトルの最初の位置を取得するには、match(item,vector)を使用します。この場合、ベクトルはデータフレームの列の1つになります。たとえば、列名がcnameの場合はdf$cnameです。

編集:

これらを組み合わせるには、次のように記述します。

df[match(item,df$cname),]

一致するとリストの最初の項目が得られるため、一意の参照番号を探していない場合は、他のものを検討することをお勧めします。

14
James

?base::rowrowを参照してください。これにより、マトリックスに似たオブジェクトの行インデックスが得られます。

10
Dean Eckles

私はあなたの質問を理解している場合は、データフレーム(またはリスト)の項目にアクセスできるようにしたいだけ行ごと

x = matrix( ceiling(9*runif(20)), nrow=5  )   
colnames(x) = c("col1", "col2", "col3", "col4")
df = data.frame(x)      # create a small data frame

df[1,]                  # get the first row
df[3,]                  # get the third row
df[nrow(df),]           # get the last row

lf = as.list(df)        

lf[[1]]                 # get first row
lf[[3]]                 # get third row

等.

4
doug

おそらく、この「補完」の補完的な例が役立つでしょう。

2つのデータセットがある:

first_dataset <- data.frame(name = c("John", "Luke", "Simon", "Gregory", "Mary"),
                            role = c("Audit", "HR", "Accountant", "Mechanic", "Engineer"))

second_dataset <- data.frame(name = c("Mary", "Gregory", "Luke", "Simon"))

名前列にコレクション全体で(コレクション全体で)一意の値のみが含まれている場合、一致によって返されるインデックスの値によって他のデータセットの行にアクセスできます

name_mapping <- match(second_dataset$name, first_dataset$name)

matchは、2番目の名前からfirst_datasetの名前の適切な行インデックスを返します。5 4 2 1の例-最初のデータセットからの行インデックス(指定された名前の値)によるロールへのアクセス

for(i in 1:length(name_mapping)) {
    role <- as.character(first_dataset$role[name_mapping[i]])   
    second_dataset$role[i] = role
}

===

second dataset with new column:
     name       role
1    Mary   Engineer
2 Gregory   Mechanic
3    Luke Supervisor
4   Simon Accountant

r

1
szymon-m