Comment remplir différentes valeurs dans une nouvelle colonne en fonction des différentes valeurs d'une autre colonne à l'aide de dplyr ?
Feng Chen
Voici mes données :
a <- data.frame(x=c('A','A','A','B','B','B'),
y=c('Yes','No','No','Yes','No','No'),
z=c(1,2,3,4,5,6))
Je veux générer une nouvelle colonne de cette façon :
- Grouper par
x
, donc tous lesA
s seront dans un groupe et tous lesB
s dans un autre - Pour chaque groupe, si
y=Yes
, conservez laz
valeur dans la nouvelle colonne. Siy=No
, alors en utilisant laz
valeur avecy=Yes
.
Ainsi, les nouvelles données devraient ressembler à ceci :
x y z z1
A Yes 1 1
A No 2 1
A No 3 1
B Yes 4 4
B No 5 4
B No 6 4
Je peux utiliser cette façon de faire :
a1 <- a %>%
filter(y=='Yes') %>%
distinct(x,y,z)
a2 <- a %>%
left_join(a1,by='x') %>%...
Mais de cette façon, je dois générer a1
en tant qu'intermédiaire. Comment faire cela dans un seul pipeline sans générer de nouvelle variable comme a1
dans mon exemple ?
ist123
Vous pouvez combiner les deux pipelines et exécuter les mêmes fonctions en une seule fois.
c'est à dire..
a <- data.frame(x=c('A','A','A','B','B','B'),
y=c('Yes','No','No','Yes','No','No'),
z=c(1,2,3,4,5,6))
a %>% left_join(a %>% filter(y=='Yes') %>% distinct(x,y,z), by='x') %>% select(-y.y)
Cela se traduit par des colonnes en double marquées avec .x et .y à la suite de la jointure.