1
votes

Comment créer une variable en utilisant une autre variable comme index?

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))

r

0 commentaires

3 Réponses :


1
votes

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.


0 commentaires

0
votes

Vous pouvez faire

dat$d <- ifelse(dat$c==1,dat$a,dat$b)


1 commentaires

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).



0
votes

Une variante dplyr

dat %>% 
  mutate(d = case_when(c==1 ~ a, 
                       TRUE ~ b))


0 commentaires