Ifelse() avec trois conditions
J'ai deux vecteurs:
a<-rep(1:2,100)
b<-sample(a)
Je voudrais avoir un ifelse condition qui compare chaque valeur de a
avec la valeur correspondante de b
, et effectue les opérations suivantes:
if a>b 1
if a<b 0
if a=b sample(1:2,length(a),replace=T)
les deux premiers peuvent être fait avec :
ifelse(a>b,1,0)
mais je ne suis pas sûr de savoir comment intégrer le cas où a
et b
sont égaux.
pensez également à utiliser
switch
qui est conçu pour ce cas (où vous avez si/autre/autre/autre...). En combinant ceci avec apply
peut vous obtenir où vous voulez être, d'élégance.OriginalL'auteur ghb | 2013-09-02
Vous devez vous connecter pour publier un commentaire.
Que diriez-vous d'un autre ifelse:
Dans ce cas, vous obtenez la valeur 1 si a>b, alors, si a est égal à b, il est soit 1 ou 2 (
sample(1:2, length(a), replace = TRUE)
), et si ce n'est (donc doit être plus petite que b) vous obtenez la valeur 0.sample(1:2,1)
pour chaquea==b
.Vous avez raison, merci pour l'ajout!
sample(1:2,1)
peut être remplacé parsample(1:2, length(a), replace = TRUE)
ousample(a)
maintenant que l'OP a précisé qu'est ce qu'il veut.Je suggère d'utiliser
sample(1:2, length(a), replace = TRUE)
, depuis pas toujours, il sera de la même distribution quesample(a)
.OriginalL'auteur Rob
C'est une façon très simple:
Ceci est basé sur des calculs avec les valeurs booléennes sont exprimés en valeurs numériques.
OriginalL'auteur Sven Hohenstein
Il existe une ambiguïté dans votre question. Voulez-vous différents des valeurs aléatoires pour tous les index où
a==b
ou une valeur aléatoire pour tous les indices?La réponse par @Rob va travailler dans le deuxième scénario. Pour le premier scénario, je suggère d'éviter
ifelse
:OriginalL'auteur mpiktas