R ベクトルの要素のインデックスを求める

Manav Narula 2023年1月30日
  1. 関数 which() を用いて R の要素のインデックスを求める
  2. R の要素のインデックスを見つけるには match() 関数を使用する
R ベクトルの要素のインデックスを求める

ベクトルは R の基本的なデータ構造の一つです。これはシーケンスの要素を格納するために使用されますが、リストとは異なり、ベクトルの要素はすべて同じデータ型でなければなりません。

ベクトル内のすべての要素は特定の位置またはインデックスを持ちます。どの要素のインデックスも、which()match() のような R の組み込み関数を使って知ることができます。

このチュートリアルでは、次のベクトルの要素 78 のインデックスを求めます。

x <- c(5,6,8,9,7,5,7,8)

関数 which() を用いて R の要素のインデックスを求める

関数 which() は、論理ベクトル (この場合は ==) にマッチする要素のインデックス (またはインデックス) を持つベクトルを返します。

例えば:

x <- c(5,6,8,9,7,5,7,8)
which(x == 7)
[1] 5 7

7 はベクトルの中に 2 回存在するので、両方の位置が返されることに注意してください。7 の最初のインデックスを取得したい場合は、以下に示すように簡単に実行できます。

which(x == 7)[1]
[1] 5

which() 関数を用いて %in% パラメータを用いて複数の要素のインデックスを求めることもできます。

which(x %in% c(7,8))
[1] 3 5 7 8

見ての通り、78 のすべての位置が返されています。

R の要素のインデックスを見つけるには match() 関数を使用する

関数 match()which() と非常によく似ています。これは要素の最初のインデックスを持つベクトルを返し、(この例のように要素が複数の位置にある場合)which() 関数よりも高速であると考えられます。

x <- c(5,6,8,9,7,5,7,8)
match(7,x)
[1] 5

以下に示すように、複数の要素の最初のインデックスを求めるのにも利用できます。

x <- c(5,6,8,9,7,5,7,8)
match(c(7,8),x)
[1] 5 3

match() 関数は 78 の最初の位置のみを返すことに注意してください。このため、最初のインデックスだけが必要な状況では、match() の方が高速であると考えられています。

著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

関連記事 - R Vector