7
votes

Comment créer un vecteur binaire avec 1 si des éléments font partie du même vecteur?

Je voudrais créer un vecteur dite correspondant composé de binaires. Tous les chiffres doivent être zéro à moins que des éléments n'appartiennent à la même variable.

Voici un exemple: xxx

Ainsi, j'ai un jeu de données avec toutes les variables de la première ligne. Maintenant, je crée deux groupes: var1 et var2.

Le vecteur correspondant de l'élément "A" est censé ressembler à: xxx

Les chiffres correspondent à mon jeu de données. Si les variables de mon ensemble de données sont dans le même groupe, il devrait y avoir un 1 dans mon vecteur correspondant, et un 0 sinon.

Cependant, mon ensemble de données réel est trop gros pour le faire manuellement. Est-ce que quelqu'un comprend ce que je veux faire?


0 commentaires

4 Réponses :


5
votes

Utilisation de ifelse code> fonction et % dans% in% code> opérateur.

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

matching_a
# [1] 1 1 0 0 0 1 1


0 commentaires

5
votes
> 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

0 commentaires

4
votes

Je vois que John Colby a déjà pris la voie que j'allais suggérer, mais je pensais que je le ferais plus explicite.

La fonction dyadique % en% renvoie un vecteur logique et multiplication par 1 contraindre à "numérique" mode. Cela pourrait également être fait avec: xxx

Vous devez également consulter ? Match sur lequel le % in% fonction est basé.


0 commentaires

0
votes

J'ai utilisé une légère variation de l'approche de John ci-dessus (et la solution de Max) pour générer une liste de «vecteurs binaires» (pour plusieurs correspondances) comme suit:

> binaryLst
[[1]]
[1] 1 1 0 0 0 1 1

[[2]]
[1] 0 0 1 1 1 0 0


0 commentaires