Il devrait y avoir un moyen plus facile de gérer cela, mais je n'arrive pas à le trouver.
Pour nous assurer que nous parlons de la même trame de données, republier vos données:
df <- structure(list(New_Mentions_1 = c("model", "telephone", "uber",
"united_states", "onion"), New_Mentions_2 = c(NA, "louis_vuitton",
"employee", NA, "pepper,rice,garlic")), .Names = c("New_Mentions_1",
"New_Mentions_2"), class = "data.frame", row.names = c(NA, -5L))
D'abord, vous vérifiez les lignes en df
ont plusieurs valeurs dans la colonne New_Mentions_2
, en utilisant grep
. Cette fonction renvoie les lignes dans lesquelles votre deuxième colonne contient une valeur de virgule. Ensuite, nous divisons la trame de données dans la partie qui n'a pas besoin d'être réparée (c'est-à-dire n'a pas de valeur de virgule dans la deuxième colonne) et appelons-la newdf
. La partie à réparer est appelée subdf
.
Nous allons mess (détails ci-dessous le code) un peu avec subdf
pour obtenir toutes les combinaisons possibles des valeurs et ajouter les résultats à la trame de données newdf
:
library(gtools)
# Which rows in df have multiple values in the second column?
inds <- grep(pattern = ",", df$New_Mentions_2)
subdf <- df[inds, ]
newdf <- df[-inds, ]
# Just in case you have multiple 'problematic' rows, we'll loop through all of them
for(i in 1:nrow(subdf)){
splitted <- strsplit(subdf$New_Mentions_2[i], ", ")[[1]]
n <- length(splitted)
shuffled <- permutations(n, n)
for(j in 1:nrow(shuffled)){
val_2 <- paste(splitted[shuffled[j, ]], collapse = ", ")
val_1 <- subdf$New_Mentions_1[i]
newdf <- rbind(newdf, c(val_1, val_2))
}
}
La partie « déconner » est effectué principalement dans la boucle externe. Premièrement, la valeur de e.g. "poivre, riz, ail" est divisé pour chaque ,
(virgule + espace). splitted
contiendra alors c("pepper", "rice", "garlic")
, pour lequel nous obtenons toutes les combinaisons possibles en utilisant la fonction permutations
du paquet gtools. Dans la première ligne de la boucle interne, les chaînes mélangées seront remises ensemble dans une seule chaîne (paste()
avec l'argument collapse = ", ")
), de sorte que nous puissions les réintégrer dans une colonne d'une trame de données.
Ceci est une exigence curieuse. Pourquoi avez-vous besoin de toutes les permutations possibles de ces éléments? –