2016-04-21 1 views
2

Il s'agit d'une nuisance mineure dans R que je cherche à voir s'il y a éventuellement un cas par défaut.Ne pas sélectionner pour les valeurs NA

je crée le vecteur suivant:

x <- c(1, 2, 1, NA) 

Je veux maintenant choisir parmi x, seules les valeurs égales à 1. Je ne en tant que tel:

x2 <- x[x == 1] 

Maintenant, quand vous voyez ce qui est en x2 il a les valeurs suivantes:

> x2 
[1] 1 1 NA 

il semble que les valeurs par défaut R à inclure Valeurs NA indépendamment de la condition. Je voudrais que R par défaut exclue les valeurs NA des conditions (car il est vrai que NA ne satisfait pas la condition x == 1).

Je suis au courant de la fonction complete.cases, utilisé en tant que tel:

x2 <- x[complete.cases(x == 1)] 

La sortie souhaitée serait le résultat de la méthode complete.cases en tant que tel:

[CAUSE RETIRÉ I messed CE UP]

Qui résout mon problème, mais je suis curieux de voir s'il y a un paramètre dans options ou quelque chose comme ça où je peux par défaut R ne pas inclure NA dans un état booléen.

Je voudrais voir s'il y a un moyen de définir si x2 <- x[x == 1] résultat dans le même que x2 <- x[complete.cases(x == 1)]. Actuellement, la différence est que la méthode non-complete.cases (normal) permet aux NA de passer et je voudrais que ce ne soit pas le cas.


Hey, désolé, je réalise que je foiré ma sortie avec complete.cases comme beaucoup d'entre vous ont dit, je veux essentiellement voir si je peux faire ceci:

> x <- c(1, 2, 1, NA) 
> x2 <- x[x == 1 & !is.na(x)] 
> x2 
[1] 1 1 

Travaillez avec ceci: x2 <- x[x == 1]. Puis-je faire en sorte que R automatiquement ignore NAs. Je pourrais créer une fonction pour ce faire, mais je voulais voir s'il y a quelque chose de construit dans R pour des conditions uniques qui ignorent les NA.

+0

Quelle est votre sortie désirée? Sans cela, je ne pense pas qu'une réponse exacte puisse être donnée. –

+0

Désolé, j'ai pensé que c'était clair. Faire un montage – giraffehere

+1

'x [! Is.na (x)]'? – Sotos

Répondre

6

Avez-vous besoin de quoi?

> x <- c(1, 2, 1, NA) 
> x[which(x==1)] 
[1] 1 1 

Pour expliquer, which(x==1) vous donnera les emplacements dans votre vecteur x qui correspond au test, x==1. Vous utilisez ce résultat pour sous-ensemble x, donnant la sortie.

> which(x==1) 
[1] 1 3 
+3

Une option similaire: 'x [x% en% 1]' – Frank

+2

ou 'x [grepl (1, x)]' – Sotos

+0

Pas tout à fait ce que je cherchais, mais 'which' semble être un wrapper efficace d'une ligne pour cela , qui;), est assez bon. Merci. :) – giraffehere

0

Je ne vois pas la valeur fonctionnelle de retourner un vecteur qui contient les éléments égaux à 1, parce que tous ces éléments seront 1. Au contraire, dans la production que vous le plus probable serait retournerez un vecteur booléen, où TRUE signifie qu'une valeur correspond et FALSE signifie qu'une valeur ne correspond pas.

Si vous voulez NA valeurs apparaissent comme étant FALSE pour ne correspond pas à, alors vous pouvez faire la comparaison et il suffit de remplacer ces valeurs avec NA faux:

x <- c(1, 2, 1, NA) 
x2 <- x == 1 
x2[is.na(x2)] <- FALSE 
> x2 
[1] TRUE FALSE TRUE FALSE 
+0

Merci, mais vous faites essentiellement en deux lignes que vous pourriez faire en un. Juste essayer de condenser mon code et le rendre plus simple à écrire. – giraffehere

+0

Assez juste. Traiter 'NA' comme' FALSE' ou 'TRUE' pourrait causer des problèmes logiques selon le type de problème que vous rencontrez. –