Je cherche à créer une nouvelle variable, d, qui saisit la valeur de an ou b en fonction de la variable C.
d = c(1,12,3,14,... etc)
Le résultat serait: p >
dat = data.frame(a=1:10,b=11:20,c=rep(1:2,5))
3 Réponses :
Nous pouvons utiliser une indexation ligne / colonne où l'index de ligne est la séquence de lignes et la colonne indexe la colonne 'c', cbind et extrait les éléments de l'ensemble de données basé sur ce
dat$d <- dat[1:2][cbind(seq_len(nrow(dat)), dat$c)] dat$d #[1] 1 12 3 14 5 16 7 18 9 20
REMARQUE: Cela devrait également fonctionner lorsqu'il y a plusieurs valeurs de colonne à extraire.
Vous pouvez faire
dat$d <- ifelse(dat$c==1,dat$a,dat$b)
Merci. bien que cela fonctionne pour l'exemple, c'est une version simplifiée de mon problème. La solution d'akrun est généralisable à mon cas (plus de 20 colonnes).
Une variante dplyr
dat %>%
mutate(d = case_when(c==1 ~ a,
TRUE ~ b))