2011-11-05 2 views
6

バイナリからなるいわゆるマッチング・ベクトルを作りたいと思います。要素が同じ変数に属していない限り、すべての数値はゼロでなければなりません。私は最初の行のすべての変数とデータセットを持って、このように1要素が同じベクトルの一部であるバイナリベクトルを作成するにはどうすればよいですか?

dataset=("a","b","c","d","x","y","z") 
var1=c("a","b","y","z") 
var2=c("c","d","x") 

は、ここでの例です。ここでは、var1とvar2の2つのグループを作成します。数字は私のデータセットに対応し

matching_a=c(1,1,0,0,0,1,1) 

要素のマッチングベクトルは、「」のように見えることになっています。私のデータセット内の変数が同じグループにある場合は、一致するベクトルに1が、それ以外の場合は0になるはずです。

しかし、私の実際のデータセットは大きすぎて手動で行うことはできません。誰も私がやりたいことを理解していますか?

答えて

4

ifelse関数と%in%演算子を使用します。

matching_a <- ifelse(dataset %in% var1, 1, 0) 

matching_a 
# [1] 1 1 0 0 0 1 1 
4
> output1 = 1 * dataset %in% var1 
> output2 = 1 * dataset %in% var2 
> output1 
[1] 1 1 0 0 0 1 1 
> output2 
[1] 0 0 1 1 1 0 0 

あなたはvar1var2より作るために多くの情報をもっと持っている場合にも、次のようにこれを拡張するために役立つことでしょう:

> vars = list(var1, var2) 
> 1 * sapply(vars, function(x) dataset %in% x) 
    [,1] [,2] 
[1,] 1 0 
[2,] 1 0 
[3,] 0 1 
[4,] 0 1 
[5,] 0 1 
[6,] 1 0 
[7,] 1 0 
3

私はジョン・コルビーが持っていることを確認すでに私が提案しようとしていた道を取ったが、もっと明示的にすると思った。

二項関数%in%は論理ベクトルを返し、1を掛けて"数値"モードに強制的に変換します。これはまたして行うことができる:

matching_a <- as.numeric(dataset %in% x) # Or 

matching_a <- 0 + (dataset %in% x) 

あなたはまた、%in%機能が基づいている?matchをご覧ください。

関連する問題