Fusion de colonnes sans dédoubler les valeurs

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Guilhem Maillard
Messages : 3
Enregistré le : 27 Jan 2021, 15:21

Fusion de colonnes sans dédoubler les valeurs

Messagepar Guilhem Maillard » 15 Mar 2021, 15:40

Bonjour,
je coince un peu sur une commande que je voudrai effectuer :
je souhaite fusionner deux colonnes mais sans dédoubler les valeurs qu'elle contiennent. En fait, il y a parfois des NA dans l'une ou dans l'autre et parfois il n'y a pas de NA et dans ce cas, je voudrai pouvoir donner la priorité à l'une des deux colonnes.

C'est à dire passer de ça :
col1 col2
A NA
NA B
B A

à ça :
col3
A
B
B

Ici, je donnerais la priorité à la colonne 1 dans le cas où les 2 colonnes contiennent des valeurs.

J'étais parti sur
df<-unite(df, col= "col3", c("col1", "col2"), na.rm=TRUE)
mais avec ça j'obtiens B_A en 3e ligne ; hors moi je veux juste B.

Quelqu'un sait il comment faire ?

Cordialement,
Guilhem

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Fusion de colonnes sans dédoubler les valeurs

Messagepar Pierre-Yves Berrard » 15 Mar 2021, 15:53

La première idée qui me vient est d'utiliser `dplyr::coalesce` :

Code : Tout sélectionner

coalesce(col1, col2)
PY

jframi
Messages : 8
Enregistré le : 17 Déc 2004, 16:05

Re: Fusion de colonnes sans dédoubler les valeurs

Messagepar jframi » 16 Mar 2021, 09:27

Bonjour,

Une solution en utilisant base-R.

Code : Tout sélectionner

df <- read.table(text="col1 col2
+ A NA
+ NA B
+ B A", header=T)

df2 <- data.frame(df,col1_col2=apply(df,1,function(a) ifelse(any(is.na(a)),a[!is.na(a)],a[1])))
df2
#  col1 col2 col1_col2
#1    A <NA>         A
#2 <NA>    B         B
#3    B    A         B


JF

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Fusion de colonnes sans dédoubler les valeurs

Messagepar Mickael Canouil » 16 Mar 2021, 10:51

Est-ce qu'un simple ifelse ne ferait pas le travail, par hasard ?

Code : Tout sélectionner

df[["col1_col2"]] <- ifelse(
  
test is.na(df[["col1"]]), 
  yes 
df[["col2"]], 
  no 
df[["col1"]]
)
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité