SOでこれを検索しても答えが見つからないようです。4 つの条件 ( lon1、lon2、lat1、およびlat2data.frame
)に基づいてa のサブセットを選択しようとしています。ベクトル化された巨大な非類似度行列と、そのサイト ( lon1、lon2、lat1、およびlat2 )があります。データ フレームの例を次に示します。cbind
out1 <- data.frame(lon1 = sample(1:10), lon2 = sample(1:10),
lat1 = sample(1:10), lat2 = sample(1:10),
dissimilarity = sample(seq(0,1,.1),10))
> out1
lon1 lon2 lat1 lat2 dissimilarity
1 2 6 4 4 0.6
2 4 2 1 3 1.0
3 10 9 2 6 0.0
4 3 1 10 8 0.5
5 9 5 9 1 0.8
6 5 7 5 9 0.9
7 1 8 6 7 0.2
8 8 3 8 5 0.7
9 7 4 3 10 0.3
10 6 10 7 2 0.1
out2 <- out1[c(2,5,6,8),]
lon1 lon2 lat1 lat2 dissimilarity
1 4 2 1 3 1.0
2 9 5 9 1 0.8
3 5 7 5 9 0.9
4 8 3 8 5 0.7
%in%
この方法で関数を数回使用してみました:
test <- out1[(out1$lon1 %in% out2$lon1) & (out1$lon2 %in% out2$lon2) &
(out1$lat1 %in% out2$lat1) & (out1$lat2 %in% out2$lat2), ]
これは、ここで提供する基本的な例ではうまくいくようです。しかし、それを巨大なデータ フレーム (多くlat
てlons
繰り返される) に適用すると、必要なユニークな組み合わせよりも大きなサブセットが返されます。の一致関数は%in%
ベクトルにしか一致できないためだと思います。&
したがって、これは condition1 condition2 &
condition3 condition4に一致&
し、元の と同じサブセットを与える結果を返していますout1
。その行の 4 つの値がすべて同じ場合のみ取得したいと考えています。このようにして、関心のあるペアごとの非類似度のデータのサブセットを取得します。
4 つの変数の一意の組み合わせに基づいて行ごとにサブセット化する方法についてのアイデアは大歓迎です。