2010-09-03 31 views
3

Je fournis cet exemple de données pour faire passer ma question.Création d'une nouvelle variable à l'aide de deux colonnes lorsqu'elles remplissent certaines conditions à l'aide de R

aid=c(1,2,3,4,5,6,7,8,9,10) 
foson=c(0,1,2,0,6,9,0,0,3,0) 
fosof=c(0,0,2,3,0,0,0,5,0,0) 
data=data.frame(aid,foson,fosof) 

Maintenant, je dois créer une nouvelle variable (colonne) appelée données hist $ avec les conditions suivantes:

if foson==0 and fosof==0, then hist = 0; 
if foson >=1 and fosof==0, then hist = 1; 
if foson==0 and fosof>=1, then hist = 2; and 
if foson>=1 and fosof>=1, then hist = 3 

J'ai essayé d'utiliser la fonction "ifelse", mais est tombé à court.

J'espère que la question est assez claire.

Merci pour toute l'aide,

Bazon

Répondre

2

La solution par Ramnath est excellente, mais le faire avec ifelse vous pouvez le faire de cette façon:

data$hist <- ifelse(data$foson>=1,ifelse(data$fosof>=1,3,1),ifelse(data$fosof>=1,2,0)) 

Cela signifie toutefois que lorsque l'un des foson ou fosof sont <1 il choisirait l'option ==0, mais il semble à partir de vos données que ce ne serait pas un problème.

4

Une solution possible est de faire ce qui suit

data$hist = (data$foson >=1) + (data$fosof >=1)*2 

Cela devrait vous donner le résultat souhaité.

+0

Bonjour Ramnath, ça a marché! J'essaie juste de bien comprendre la ligne entière (syntaxe) ... surtout le bit * 2 à la fin de la ligne.Bazon – baz

+1

Il utilise le fait que les valeurs logiques (TRUE, FALSE) peuvent aussi être utilisées numériquement (1,0). Il définit simplement tous les foson à 1 ou 0 et tous les fosof à 2 (1 * 2) ou 0 et les ajoute. C'était en fait une excellente solution ... quelque chose qu'un programmeur C penserait. – John