0
votes

Correspondre et remplacer automatiquement Word & Position avec son remplacement

Je travaille avec les données de chemin de conversion Google Analytics dans R. Mon cadre de données importé ressemble à l'exemple suivant: xxx

Comme vous pouvez le constater, les différents canaux sont séparés par un "> " symbole. Ce que je voudrais faire, c'est ce que je voudrais faire, c'est ce que je voudrais faire, c'est ce que je veux faire:

remplacer "social" dans la colonne "Channel_Path" de la valeur correspondante dans la colonne "Source_Path" sans modifier d'autres valeurs. Cela devrait arriver à toutes les lignes de l'ensemble de données.

Le résultat devrait alors ressembler à ce qui suit: xxx

Le problème que j'ai ici est que je suis Travailler avec un grand jeu de données (60 000 rangées) et que je ne sais pas comment remplacer automatiquement les valeurs en fonction de leur position.

Pour une meilleure reproducabilité, voici le code de l'exemple indiqué ci-dessus: < / p> xxx

merci!


0 commentaires

3 Réponses :


0
votes

entrée: xxx pré>

fonction: p> xxx pré>

sortie: p>

Channel_Path                                   Source_Path                                             
  <chr>                                          <chr>                                                   
1 facebook > Email > facebook > Paid Search > f~ facebook > mailtool > m.facebook.com > google > faceboo~
2 Organic Search > Email > pinterest             google > mailtool > pinterest


5 commentaires

Hey @flo - Malheureusement, cela ne me donne pas la sortie souhaitée sur mon vrai jeu de données. Comme mentionné dans mon commentaire, mon code n'était qu'un échantillon pour la rendre reproductible. Cependant, mon vrai jeu de données représente 60 000 lignes et le code ne correspond pas automatiquement à la position du mot social avec le remplacement correspondant.


Ok j'ai édité mon code pour essayer quelque chose d'un peu différent.


Hé Flo, merci encore d'avoir essayé! Tuton, ce code remplace toutes les valeurs de la colonne "canal_path" avec la valeur que j'ai dans la première ligne de mon ensemble de données. Maintenant, toutes les lignes ont la valeur "Recherche payée".


J'ai prolongé mon exemple par une ligne - peut-être qu'il est alors plus facile de reproduire quand une autre ligne est ajoutée au Dataframe


Mon mauvais, j'ai oublié le commandement d'obœurs () pour diviser la ligne de données par ligne avant d'appliquer la fonction. J'espère que cela fonctionne comme prévu maintenant.



2
votes

Nous pouvons obtenir les données en format long séparant les colonnes sur ">" code>, remplacer chanson_path code> valeurs où canal_path == 'social' code> et coller à nouveau les valeurs.

library(dplyr)

df %>%
  mutate(row = row_number()) %>%
  tidyr::separate_rows(Channel_Path, Source_Path, sep = " > ") %>%
  mutate(Channel_Path = ifelse(Channel_Path == 'Social', 
                               Source_Path, Channel_Path)) %>%
  group_by(row) %>%
  summarise(across(.fns = ~paste(., collapse = " > "))) %>%
  select(-row) 

#                                                          Channel_Path
#1 facebook > Email > m.facebook.com > Paid Search > facebook+instagram
#2                                   Organic Search > Email > pinterest
#                                                         Source_Path
#1 facebook > mailtool > m.facebook.com > google > facebook+instagram
#2                                      google > mailtool > pinterest


4 commentaires

Hey @ronak, c'est très utile! Une légère adaptation / question: J'ai deux autres colonnes avec les conversions et la valeur de conversion. Après avoir exécuté votre code, ceux-ci sont regroupés avec le ">". En d'autres termes: au lieu d'avoir une valeur de conversion de 600, j'obtiens 600> 600> 600. Y a-t-il un moyen d'éviter que cela se produise pour d'autres colonnes? Merci!


@emil_rore je suppose que vous pouvez modifier la ligne résumer ligne sur résumée (sur (C (Channel_path, source_path), .fns = ~ Coller (., Collapse = ">"))) Seuls seulement ces deux colonnes sont modifiées.


Hey Ronak, merci beaucoup! Ouais, vous avez raison - cela ne change que ces deux colonnes, mais ne laisse également que ces deux colonnes dans le "DF". Savez-vous s'il y a des problèmes avec l'utilisation de "conversion = première (conversion)" dans la ligne SUMPARSE pour ajouter les valeurs inchangées à la table d'extrémité?


Oui, vous pouvez utiliser cela dans résumée . Sinon, vous pouvez utiliser ces colonnes dans group_by aussi.



0
votes

Nous allons travailler en ligne à la ligne et pour chaque ligne, nous analysons les éléments de chaque colonne à l'aide de Scan () code>, nous allons utiliser ifelse () code> à Obtenez un vecteur du bon élément, que nous allons nous effondrer à notre sortie demandée.

library(dplyr, warn.conflicts = FALSE)

df %>%
  rowwise() %>%
  mutate_at("Channel_Path", ~{
    cp <- scan(text = ., what = character(), sep = ">", strip.white = TRUE, quiet = TRUE)
    sp <- scan(text = Source_Path, what = character(), sep = ">", strip.white = TRUE, quiet = TRUE)
    cp <- ifelse(cp == "Social", sp, cp)
    paste(cp, collapse = " > ")
  }) %>%
  ungroup()
#> # A tibble: 2 x 2
#>   Channel_Path                             Source_Path                          
#>   <chr>                                    <chr>                                
#> 1 facebook > Email > m.facebook.com > Pai~ facebook > mailtool > m.facebook.com~
#> 2 Organic Search > Email > pinterest       google > mailtool > pinterest


0 commentaires