R Language
操作を設定する
サーチ…
備考
セットには、個々の要素のコピーが1つだけ含まれています。他のプログラミング言語とは異なり、ベースRにはセットの専用データ型がありません。その代わりに、Rは、その別個の要素だけを取って、集合のようなベクトルを扱います。これは、集合演算子、 setdiff
、 intersect
、 union
、 setequal
、および%in%
ます。ためv %in% S
唯一S
ないベクトルが、セットとして扱われるv
。
Rの真のセットデータ型の場合、Rcppパッケージにはいくつかのオプションがあります 。
ペアの演算子を設定する
セットの比較
Rでは、ベクトルに重複要素が含まれることがあります。
v = "A"
w = c("A", "A")
ただし、セットには各要素のコピーが1つしかありません。 Rはその別個の要素だけを取って集合のようなベクトルを扱うので、上の2つのベクトルは同じものとみなされます:
setequal(v, w)
# TRUE
セットの組み合わせ
主要な関数は自然な名前を持っています:
x = c(1, 2, 3)
y = c(2, 4)
union(x, y)
# 1 2 3 4
intersect(x, y)
# 2
setdiff(x, y)
# 1 3
これらはすべて同じページの?union
記録されています。
ベクトルのメンバーシップを設定する
%in%
演算子は、ベクトルとセットを比較します。
v = "A"
w = c("A", "A")
w %in% v
# TRUE TRUE
v %in% w
# TRUE
左側の各要素は個別に扱われ、右側のベクトルに関連付けられたセットのメンバーシップ(そのすべての別個の要素で構成されている)についてテストされます。
等価性テストとは異なり、 %in%
常にTRUE
またはFALSE
返しFALSE
。
c(1, NA) %in% c(1, 2, 3, 4)
# TRUE FALSE
ドキュメントは?`%in%`
ます。
ベクトルのデカルトまたは「クロス」積
(x、y)という形式のベクトルをすべて見つけるには、xをベクトルXから引き出し、yをYからexpand.grid
にはexpand.grid
を使いexpand.grid
。
X = c(1, 1, 2)
Y = c(4, 5)
expand.grid(X, Y)
# Var1 Var2
# 1 1 4
# 2 1 4
# 3 2 4
# 4 1 5
# 5 1 5
# 6 2 5
結果は渡された各ベクトルの1つの列を持つdata.frameです。多くの場合、ベクトルの「グリッド」を拡張するのではなく、セットのデカルト積を取ることが必要です。私たちはunique
lapply
とdo.call
使うことができます:
m = do.call(expand.grid, lapply(list(X, Y), unique))
# Var1 Var2
# 1 1 4
# 2 2 4
# 3 1 5
# 4 2 5
組み合わせに機能を適用する
結果として得られる各組み合わせf(x,y)
に関数を適用する場合は、別の列として追加することができます。
m$p = with(m, Var1*Var2)
# Var1 Var2 p
# 1 1 4 4
# 2 2 4 8
# 3 1 5 5
# 4 2 5 10
我々が必要として、このアプローチは、多くのベクトルのために動作しますが、2の特殊な場合には、時々で達成することができるマトリックスに結果を持って、より良いフィット感ですouter
:
uX = unique(X)
uY = unique(Y)
outer(setNames(uX, uX), setNames(uY, uY), `*`)
# 4 5
# 1 4 5
# 2 8 10
関連する概念とツールについては、コンビナトリアルのトピックを参照してください。
ユニーク/ドロップの複製を作成する/ベクトルから別の要素を選択する
結果の各要素が一意であるようにunique
削除が重複するようにします(1回だけ表示されます)。
x = c(2, 1, 1, 2, 1)
unique(x)
# 2 1
値は、最初に出現した順序で返されます。
duplicated
各タグには、
duplicated(x)
# FALSE FALSE TRUE TRUE TRUE
anyDuplicated(x) > 0L
は、ベクトルに重複が含まれているかどうかを素早く確認する方法です。
ベクトルの集合重なり/ベン図の測定
2つのセットの要素の数をカウントするには、カスタム関数を書くことができます:
xtab_set <- function(A, B){
both <- union(A, B)
inA <- both %in% A
inB <- both %in% B
return(table(inA, inB))
}
A = 1:20
B = 10:30
xtab_set(A, B)
# inB
# inA FALSE TRUE
# FALSE 0 10
# TRUE 9 11
さまざまなパッケージによって提供されるVennダイアグラムを使用して、複数のセットにわたるオーバーラップ数を視覚化することができます。