2013-06-23 5 views
5

Rを使用して、シーケンス内のどの値が不足しているかを効率的に特定したい。私はどのようにそれを行うのか、以下の例を書いた。より良い方法が必要です。助けてもらえますか?シーケンス内に欠損値を特定する/ 2つのリスト間で非対称な差異を実行する

data.list=c(1,2,4,5,7,8,9) 

full.list=seq(from = 1, to = 10, by =1) 

output <- c() 
for(i in 1:length(full.list)){ 
    holder1 <- as.numeric(any(data.list == i)) 
    output[i] <- holder1 
} 

which(output == 0) 
+1

私はあなたが別の意義を持っていたRの値が不足しているため、質問のタイトルを変更することを示唆している... – agstudy

+0

@agstudyは、あなたが何かを示唆してもらえますか? –

+0

例えば、2つのリストの間に非対称の違いを実行する方法:) – agstudy

答えて

10

別の可能な解決策

setdiff(full.list,data.list) 
2
full.list[!full.list %in% data.list] 
+0

'setdiff()'は、2つのシーケンスがファクタである場合、その基礎となるファクタセットが同じであれば違いを識別しません。しかし、 '%in%'メソッドは、実際のシーケンスの違いを識別します。 –

1

grep()を使用して(%in%に類似)match

full.list[!match(full.list,data.list,nomatch=FALSE)] 
[1] 3 6 10 
0

を使用して別のオプション:

grep(paste("^", data.list, "$", sep = "", collapse = "|"), full.list, invert = TRUE)

「怠け者」で、collapse = ^|$を使用しても正確な精度を得るには、上記を使用します。

grepl()を使用する:

full.list[!grepl(paste("^", data.list, "$", sep = "", collapse = "|"), full.list)]

関連する問題