J'ai deux ensembles de données, les données d'examen et les données de sujet
Code de saisie de mes données d'examen
structure(list(Review = structure(2:1, .Label = c("Canteen Food could be improved",
"Sports and physical exercise need to be given importance"), class = "factor")), class = "data.frame", row.names = c(NA,
-2L))
Code de saisie de mes données de sujet
structure(list(word = structure(2:1, .Label = c("canteen food",
"sports and physical"), class = "factor"), Topic = structure(2:1, .Label = c("Canteen",
"Sports "), class = "factor")), class = "data.frame", row.names = c(NA,
-2L))
Dput de ma sortie souhaitée , je veux rechercher les mots qui apparaissent dans les données de sujet et les mapper aux données de révision
structure(list(Review = structure(2:1, .Label = c("Canteen Food could be improved",
"Sports and physical exercise need to be given importance"), class = "factor"),
Topic = structure(2:1, .Label = c("Canteen", "Sports "), class = "factor")), class = "data.frame", row.names = c(NA,
-2L))
Ce que vous voulez, c'est quelque chose comme une jointure floue. Voici une force brute à la recherche d'une sous-chaîne stricte (mais insensible à la casse):
library(dplyr)
review %>%
full_join(topic, by = character()) %>% # full cartesian expansion
group_by(word) %>%
mutate(matched = grepl(word[1], Review, ignore.case = TRUE)) %>%
ungroup() %>%
filter(matched) %>%
select(-word, -matched)
# # A tibble: 2 x 2
# Review Topic
# <fct> <fct>
# 1 Sports and physical exercise need to be given importance "Sports "
# 2 Canteen Food could be improved "Canteen"
C'est un peu de force brute en ce sens qu'il fait une jointure cartésienne des cadres avant de tester avec grepl
, mais ... vous ne pouvez pas vraiment éviter certaines parties de cela.
Vous pouvez également utiliser le fuzzyjoin
package, qui est destiné aux jointures sur des objets flous (nommés de manière appropriée).
fuzzyjoin::regex_left_join(review, topic, by = c(Review = "word"), ignore_case = TRUE)
# Warning: Coercing `pattern` to a plain character vector.
# Review word Topic
# 1 Sports and physical exercise need to be given importance sports and physical Sports
# 2 Canteen Food could be improved canteen food Canteen
L'avertissement est que vos colonnes sont des factor
s, non character
, cela devrait être inoffensif. Si vous souhaitez masquer l'avertissement, vous pouvez utiliser suppressWarnings
(un peu fort); si vous voulez éviter l'avertissement, convertissez toutes les colonnes applicables de factor
en character
(par exemple topic[] <- lapply(topic, as.character)
, même pour review$Review
, mais modifiez-le si vous avez des colonnes numériques).
Amateur ici. Je l'ai fait en utilisant la base R, pas dplyr, car je ne suis pas le meilleur pour les fonctions de jointure.
Ci-dessous, initialisez votre dfs. J'ai ajouté plus d'exemples pour m'assurer que tout fonctionnait correctement. Également choisi de ne pas utiliser de facteurs, rend les choses compliquées pour l'attribution de chaînes plus tard.
# initialize your dfs
review <- data.frame("Review" = c("Canteen Food could be improved",
"Sports and physical exercise need to be given importance",
"canteen food x2",
"this is my sports and physical",
"SPORTS AND PHYSICAL",
"meme",
"canteen and food",
"this is my meme",
"memethis"
),
stringsAsFactors = F)
topic <- data.frame("word" = c("canteen food", "sports and physical", "meme"),
"Topic" = c("Canteen", "Sports", "meme_cat"),
stringsAsFactors = F)
Ensuite, utilisez simplement des boucles for imbriquées pour parcourir les mots souhaités, trouver les chaînes correspondantes et attribuer le sujet approprié. Et tout initialisé AVANT la boucle for.
# initialize new column to write into in loop
review <- cbind(review, "Topic" = rep(NA, nrow(review)))
# initialize before for loop
a <- rep(F, nrow(topic))
# loop over words in topic and find string matches in review. if so, assign review$topic = Topic for (i in 1:nrow(topic)) { for(j in 1:nrow(review)) { a[j] <- grepl(topic$word[i], review$Review[j], ignore.case=T) } if (any(a)) { review$Topic[a] = topic$Topic[i]
}
review
# Review Topic
#1 Canteen Food could be improved Canteen
#2 Sports and physical exercise need to be given importance Sports
#3 canteen food x2 Canteen
#4 this is my sports and physical Sports
#5 SPORTS AND PHYSICAL Sports
#6 meme meme_cat
#7 canteen and food <NA>
#8 this is my meme meme_cat
#9 memethis meme_cat
Découvrez les traditions de Noël que Reba McEntire partage avec son fils, Shelby Blackstock, qui, selon elle, pourraient laisser certains confus.
Apprenez-en plus sur la façon dont Meghan Markle et Mariah Carey se sont liées sur leurs cheveux naturels dans un épisode du podcast "Archetypes" de Meghan.
Découvrez ce qu'une source a affirmé que le prince Harry espérait concernant les relations avec sa famille, en particulier le roi Charles et le prince William.
Un rapport de police accusant Brennon, star de "Love Is Blind", de violence domestique a récemment fait surface. Maintenant, Brennon a répondu aux réclamations.
Il y a le jeu d'acteur, puis il y a le doublage. Les deux sont difficiles à leur manière. Que savez-vous de ces légendes dans le domaine ?
Peut-être qu'aucun pays sur Terre n'aime Noël plus que les Philippines. Les résidents y célèbrent les vacances pendant quatre mois solides. Voici pourquoi.
Einstein a qualifié ce phénomène d'"action effrayante à distance" et les physiciens viennent de remporter le prix Nobel pour leurs travaux, mais qu'est-ce que l'intrication quantique ?
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
Russ Casey En ce moment, il y a une femme noire assise en prison, lisant l'histoire d'un juge texan qui a été reconnu coupable du même crime qu'elle a commis. Elle a probablement remarqué que le juge avait été condamné à cinq ans de probation dans le même comté qui l'avait condamnée à cinq ans de prison.
Normalement, les voitures que je choisis pour Meh Car Monday n'ont jamais été conçues à l'origine pour être meh, en tant que telles. Mehness leur est juste arrivé.
Lot de 12 couvercles extensibles en silicone Tomorrow's Kitchen | 14 $ | Amazone | Code promo 20OFFKINJALids sont essentiellement les chaussettes de la cuisine ; se perd toujours, laissant des conteneurs orphelins qui ne pourront plus jamais être refermés. Mais que se passerait-il si vos couvercles pouvaient s'étirer et s'adapter à tous vos restes de récipients, casseroles, poêles et même de gros fruits tranchés ? Vous n'aurez plus jamais à vous soucier de perdre ce couvercle très spécifique.
Nous avons piraté quelques villes industrielles dans cette colonne, comme Los Angeles et Las Vegas. Il est maintenant temps pour une ville complexe militaro-industrielle.
L'équipe attend les médailles qu'elle a remportées aux Jeux olympiques d'hiver de 2022 à Pékin, alors qu'un cas de dopage impliquant la patineuse artistique russe Kamila Valieva est en cours de règlement.
Des milliers d'acheteurs Amazon recommandent la taie d'oreiller en soie Mulberry, et elle est en vente en ce moment. La taie d'oreiller en soie est disponible en plusieurs couleurs et aide à garder les cheveux doux et la peau claire. Achetez les taies d'oreiller en soie alors qu'elles sont jusqu'à 46% de réduction sur Amazon
Une plainte pour délit aggravé menaçant a été déposée jeudi contre Joe Mixon
Le département de police de Lafayette a commencé à enquêter sur un professeur de l'Université Purdue en décembre après avoir reçu plusieurs plaintes concernant un "homme suspect s'approchant de femmes".
Tout comme le monde qui nous entoure, la langue est en constante évolution. Alors que dans les époques précédentes, les changements de langue se produisaient sur des années, voire des décennies, cela peut maintenant se produire en quelques jours, voire quelques heures.
Je suis de retour pour la première fois en six ans. Je ne peux pas vous dire depuis combien de temps j'attends ça.
Cómo mejoramos la accesibilidad de nuestro componente de precio, y cómo nos marcó el camino hacia nuevos saberes para nuestro sistema de diseño. Por Ana Calderon y Laura Sarmiento Leer esta historia en inglés.
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.