2017-08-11 5 views
1

Je suis relativement nouveau dans l'affaire R.présent texte chaîne en ne conservant que dans un autre dataframe en R

J'ai deux dataframes, chacun d'une seule variable appelée final et cv.

final ressemble:

V1 
humans, aged, female, stroke 
infant, male, echocardiography 
aneurysm, adolescent, female, diabetes 
pregnant, diabetes, female 
cardiovascular diseases, complications 

et cv ressemble

V2 
stroke 
pregnant 
echocardiography 
aneurysm 
diabetes 
cardiovascular diseases 

Je veux manipuler final afin qu'il ne comprend que le texte présent dans cv. Voilà ce que je veux la trame de données résultant de final à ressembler à:

V1 
stroke 
echocardiography 
aneurysm, diabetes 
pregnant, diabetes 
cardiovascular diseases 

S'il vous plaît conseiller. Merci!

+1

Ne pas copier/coller vos données ici. S'il vous plaît lire [Comment faire un grand exemple reproductible en R?] (Https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – Masoud

Répondre

4

Nous pouvons utiliser les fonctions de dplyr et stringr. De plus, la fonction or1 de rebus est très utile pour construire des expressions d'expressions régulières. str_extract_all peut extraire toute la chaîne correspondante. S'il y a plus d'une phrase, la sortie de str_extract_all va créer quelque chose comme c("aneurysm", "diabetes"). J'ai utilisé plusieurs str_replace appel avec fixed pour remplacer c(, ) et " à rien. Cette partie peut être faite plus efficacement en utilisant regex, mais je ne suis pas familier avec regex. df_final est la sortie finale.

# Load packages 
library(dplyr) 
library(stringr) 
library(rebus) 

# Create example data frame 
df1 <- data_frame(V1 = c("humans, aged, female, stroke", "infant, male, echocardiography", 
         "aneurysm, adolescent, female, diabetes", "pregnant, diabetes, female", 
         "cardiovascular diseases, complications")) 
df2 <- data_frame(V2 = c("stroke", "pregnant", "echocardiography", "aneurysm", 
         "diabetes", "cardiovascular diseases")) 

# Process the data 
df_final <- df1 %>% 
    mutate(V1 = str_extract_all(V1, or1(df2$V2))) %>% 
    mutate(V1 = str_replace(V1, fixed("c("), "")) %>% 
    mutate(V1 = str_replace(V1, fixed(")"), "")) %>% 
    mutate(V1 = str_replace_all(V1, fixed('"'), "")) 
+0

merci, mais votre code seulement extrait la première phrase qui apparaît dans chaque rangée. par exemple, dans la troisième rangée, je veux à la fois «aneurysm, diabète», mais votre code ne sort que «aneurysm» – sweetmusicality

+0

@sweetmusicality S'il vous plaît voir mes mises à jour. Je crois que 'df_final' correspond à votre sortie attendue maintenant. – www

+0

merci - Je vais essayer cela. Pourriez-vous mettre à jour vos variables afin que les deux dataframes aient des variables différentes ('V1' et' V2') parce que j'ai peur d'utiliser les mauvaises variables sinon. Merci! – sweetmusicality