Comment inclure NA dans ifelse?
Je suis en train de créer une colonne ID
basé sur la logique des déclarations pour les valeurs des autres colonnes. Par exemple, dans la suite de dataframe
test <- structure(list(time = c(10L, 20L, NA, 30L), type = structure(c(1L,
2L, 3L, NA), .Label = c("A", "B", "C"), class = "factor"), ID = c(NA,
"1", NA, NA)), .Names = c("time", "type", "ID"), row.names = c(NA,
-4L), class = "data.frame")
qui ressemble
time type
1 10 A
2 20 B
3 NA C
4 30 NA
Je veux faire une nouvelle colonne ID
contenant une valeur de 1 pour tous les time
qui ne sont pas NA
et tous les type
qui ne sont pas A
. J'utilise le code suivant pour cette:
test$ID <- ifelse(is.na(test$time) | test$type == "A", NA, "1")
Cela donne le résultat que
time type ID
1 10 A NA
2 20 B 1
3 NA C NA
4 30 NA NA
Toutefois, ce code ignore les NA
dans la colonne type
résultant en une valeur de NA
dans la colonne ID
. J'ai besoin de cela pour être une valeur de 1, donc ma solution nécessaire devrait donner:
time type ID
1 10 A NA
2 20 B 1
3 NA C NA
4 30 NA 1
Quelqu'un peut-il me dire comment je pourrait le faire? J'ai pu obtenir que cela fonctionne avec mon code si je pouvais changer quelque chose à la suite de is.na(test$type)
de retour FALSE
au lieu de TRUE
mais je ne suis pas sûr de la façon de le faire. Ou, peut-être la structure de mon code existant doit être entièrement changé? J'apprécie toute l'aide!
source d'informationauteur Thomas
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas vraiment comparer
NA
avec une autre valeur, donc à l'aide d'==
ne fonctionnerait pas. Considérez les points suivants:Vous pouvez simplement changer votre comparaison de
==
à%in%
:Quant à votre autre question,
suffit d'utiliser
!
à nier les résultats:@AnandaMahto a abordé pourquoi vous êtes l'obtention de ces résultats et de la façon la plus claire d'obtenir ce que vous voulez. Mais une autre option serait d'utiliser
identical
au lieu de==
.Ou de l'utilisation
isTRUE
:Il semble que vous voulez le ifelse déclaration d'interpréter NA valeurs FALSE au lieu de NA dans la comparaison. J'ai utiliser les fonctions suivantes pour gérer cette situation, donc je ne pas avoir à manipuler constamment la NA situation:
Vous pouvez également combiner ces fonctions en un seul pour être plus efficace. Aussi, pour retourner le résultat que vous souhaitez, vous pouvez utiliser:
Donc, j'entends cela fonctionne:
Mais j'avoue que je n'ai qu'intermittent chance avec elle.
Vous pouvez également essayer un elseif.