2013-01-18 5 views
0

Tout d'abord je déclare que j'ai vérifié toutes les questions connexes sur ifelse, mais sans succès. J'essaie d'utiliser ifelse pour ajouter un facteur (période d'accouplement) chez les espèces sauvages selon les mois. Un exemple de la DB est ci-dessous:comportement ifelse dans R

> DB <- data.frame(ID = 1:6, Month = 1:12) 
colnames(DB) <- c("ID","Month") 

Ce que j'ai essayé est:

Period<-with(DB,ifelse(Month==c(2,3,4,5,6,7,8,9,10),"M","R"))) 

mais le résultat ne correspond pas à la condition:

(Period)[1] "R" "R" "R" "R" "R" "R" "R" "R" "R" "R" "R" "R" 

et il y a aussi un avertissement:

Warning message: 
In Month == c(2, 3, 4, 5, 6, 7, 8, 9, 10) : 
longer object length is not a multiple of shorter object length` 

Étonnamment, quand je lancer le script sur le vrai DB deux choses se produisent:

  • Dans la nouvelle colonne Période certains M apparaît
  • Aucun avertissement sort

Je suis vraiment confus sur la façon dont fonctionne ifelse. J'espère que quelqu'un pourrait clarifier comment cette fonction fonctionne et comment taper correctement le script pour obtenir le bon résultat.

+1

Vous pourriez vouloir accepter quelques réponses à vos questions, donner à vos intervenants une réputation supplémentaire et bien rangé la placez un peu :-) –

Répondre

3

Votre comparaison est de la mauvaise forme. ifelse passe par un élément à la fois effectuant la comparaison tandis que Month == 2:10 va comparer deux par deux les éléments et retourner un vecteur indiquant si chaque comparaison par paire est vraie ou fausse.

Vous voulez utiliser %in% qui renvoie true ou false selon si un élément est dans un vecteur:

Period<-with(DB,ifelse(Month %in% 2:10,"M","R"))) 
3

Utilisation %in% comme dans:

Period<-with(DB,ifelse(Month %in% c(2,3,4,5,6,7,8,9,10),"M","R")) 
Period 
[1] "R" "M" "M" "M" "M" "M" "M" "M" "M" "M" "R" "R" 
+0

Salut Jack, merci beaucoup pour l'explication: c'est très utile car je ne trouve pas de réponses sur l'utilisation de ifelse qui rapportent l'utilisation de% en% !!! Vraiment utile et de Bien sûr, le script fonctionne grandement! Salut Jilber bien sur ton script fonctionne très bien, j'apprécie vraiment le soutien de la communauté: le monde n'est pas si mal !!! Encore une fois, merci beaucoup !!! – stefano

Questions connexes