2016-10-31 3 views
1

与えられたデータフレーム(以下の例ではmyData)から、リストに格納された値の少なくとも1つに一致する値を持つ変数をサブセット化したいとします(myList以下の例を参照)。サブセット変数の値のペアが一致するR

myList <- list(c(8,15), c(2,3)) 

v1 <- c(1, 2, 3, 8, 15) 
v2 <- c(3, 7, 8, 9, 10) 
v3 <- c(2, 4, 5, 6, 7) 
v4 <- c(8, 15, 6, 7, 9) 

myData <- cbind(v1, v2, v3, v4) 

V1に対8,15及び対2,3を発生し、V4に対8,15を発生するため理想的サブセットのみv1v4から成るべきです。

私は次のように、単一の対(すなわち、8、15)ためwhichステートメントを使用しようとした:

subset <- myData[which(myData==unlist(myList[[1]][1]) & myData==unlist(myList[[1]][2]))] 

さらに、出力は空の整数です。 whichの明細書に何かがありませんか?また、複数の値のペアに対してコードを実装するにはどうすればよいですか?

ご協力いただきありがとうございます。

GION

+1

ペア内の各番号の連続した出現(8、15; 2、3)または各ペアの両方の数字の出現を探していますか? – seasmith

+0

発生します。 –

答えて

2

私はこの問題の解決策を見つけた:

myData[, unique(which(sapply(myList, function(y) apply(myData, 2, function(x)all(y %in% x))),arr.ind = T)[, 1])] 
    v1 v4 
[1,] 1 8 
[2,] 2 15 
[3,] 3 6 
[4,] 8 7 
[5,] 15 9 

それは少し醜い機能ので説明です: 適用する機能をチェックします。myListからリスト項目からすべての項目をすることができるかどうかmyDataの列にあります。 sapply関数はリストからすべての項目を検索します。どの文が彼が見つけたかを調べ、行と列を与えます。私たちは、列を出力する固有の行だけに興味があります。少し複雑ですが、うまくいけばそれを見てください:)

+0

私は[このSOの投稿]からの変更を使用して同様の結果を見つけました(http://stackoverflow.com/questions/13062402/find-the-index-of-the-column-in-data-frame-that-c​​ontains-値としての文字列)。 (myData、2、function(x)sum(grepl(myList [[1] [x])) 1]] [2]、x))); myData [、cols] 'これは 'myList'の最初の要素に対して同じ結果を返します。 – seasmith

関連する問題