Utilisation de plusieurs critères dans la fonction de sous-ensemble et les opérateurs logiques
Si je veux sélectionner un sous-ensemble de données dans R, je peux utiliser la fonction de sous-ensemble. Je voulais à la base d'une analyse sur des données qui a été correspondant à l'un des un certain nombre de critères, par exemple, qu'une certaine variable est soit 1, 2 ou 3.
J'ai essayé
myNewDataFrame <- subset(bigfive, subset = (bigfive$bf11==(1||2||3)))
Il n'a toujours il suffit de sélectionner les valeurs qui correspondent à la première des critères, ici 1. Mon hypothèse était qu'il allait commencer à 1 et si elle ne s'évaluer à "false", il irait à 2 et à 3, et si aucune ne correspond à l'instruction suivant = = "faux", et si l'un d'entre eux correspond à, il est "vrai".
J'ai obtenu le bon résultat à l'aide de
newDataFrame <- subset(bigfive, subset = (bigfive$bf11==c(1,2,3)))
Mais je voudrais être en mesure de sélectionner des données via des opérateurs logiques, donc: pourquoi la première approche ne fonctionne pas?
source d'informationauteur JanD
Vous devez vous connecter pour publier un commentaire.
Le bon opérateur est
%in%
ici. Voici un exemple avec des données factices::
Le sous-ensemble de
dat
oùbf11
est égal de l'ensemble1,2,3
est procédé comme suit à l'aide de%in%
:La raison pour laquelle votre original ne fonctionne pas, casser vers le bas pour voir le problème. Regardez ce que
1||2||3
évalue à:et vous obtiendrez le même à l'aide de
|
à la place. En conséquence, lesubset()
appel de retourner uniquement les lignes oùbf11
étaitTRUE
(ou quelque chose qui évaluée àTRUE
).Ce que vous auriez pu écrire aurait été quelque chose comme:
Qui donne le même résultat que mon plus tôt
subset()
appel. Le point est que vous avez besoin d'une seule série de comparaisons, pas une comparaison d'une série d'options. Mais comme vous pouvez le voir,%in%
est beaucoup plus utile et moins verbeux dans de telles circonstances. Notez aussi que j'ai utiliser|
que je veux comparer chaque élément debf11
contre1
2
et3
à tour de rôle. Comparer:Pour ton exemple, je crois que la suivante devrait fonctionner:
Voir les exemples dans les
?subset
pour plus d'. Juste pour montrer, une plus compliqué logique sous-ensemble serait:Et Chasser les points,
%in%
serait plus efficace dans votre exemple:Comme Chase souligne aussi, assurez-vous de comprendre la différence entre
|
et||
. Pour voir les pages d'aide pour les opérateurs, l'utilisation?'||'
où l'opérateur est cité.