サーチ…


備考

セットには、個々の要素のコピーが1つだけ含まれています。他のプログラミング言語とは異なり、ベースRにはセットの専用データ型がありません。その代わりに、Rは、その別個の要素だけを取って、集合のようなベクトルを扱います。これは、集合演算子、 setdiffintersectunionsetequal 、および%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 lapplydo.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ダイアグラムを使用して、複数のセットにわたるオーバーラップ数を視覚化することができます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow