2017-10-12 7 views
0

Je travaille sur un ensemble de données où une colonne (Place) est constituée d'une phrase de localisation.Division de la colonne par le séparateur de droite à gauche dans R

librabry(tidyverse) 

example <- tibble(Datum = c("October 1st 2017", 
          "October 2st 2017", 
          "October 3rd 2017"), 
      Place = c("Tabiyyah Jazeera village, 20km south east of Deir Ezzor, Deir Ezzor Governorate, Syria", 
         "Abu Kamal, Deir Ezzor Governorate, Syria", 
         "شارع القطار al Qitar [train] street, al-Tawassiya area, north of Raqqah city centre, Raqqah governorate, Syria")) 

Je voudrais diviser la colonne Place par le séparateur virgule donc je préfère une solution avec le tidyverse package. Parce que les valeurs de Place ont des longueurs différentes, je voudrais commencer de droite à gauche. Alors que le pays Syria est la valeur dans la dernière colonne de cette base de données.

Oh, et pour un bonus avec quel code RegEx puis-je supprimer les caractères arabes?

Merci d'avance.

Edit: trouvé ma réponse: Pour enlever les caractères arabes (merci à @ g5w):

gsub("[\u0600-\u06FF]", "", airstrikes_okt_clean$Plek) 

et le fractionnement de la colonne d'une manière tidyr:

airstrikes_okt_clean <- separate(example, 
          Place, 
          into = c("detail", 
             "detail2", 
             "City_or_village", 
             "District", 
             "Country"), 
          sep = ",", 
          fill = "left") 

Répondre

1

juste diviser le chaîne sur virgule et l'inverse.

lapply(strsplit(Place, ","), rev) 
[[1]] 
[1] " Syria"       " Deir Ezzor Governorate"  
[3] " 20km south east of Deir Ezzor" "Tabiyyah Jazeera village"  

[[2]] 
[1] " Syria"     " Deir Ezzor Governorate" 
[3] "Abu Kamal"    

[[3]] 
[1] " Syria"        " Raqqah governorate"     
[3] " north of Raqqah city centre"  " al-Tawassiya area"     
[5] "شارع القطار al Qitar [train] street" 

Pour se débarrasser des caractères arabes avant de se séparer, essayez

gsub("[\u0600-\u06FF]", "", Place) 
[1] "Tabiyyah Jazeera village, 20km south east of Deir Ezzor, Deir Ezzor Governorate, Syria"    
[2] "Abu Kamal, Deir Ezzor Governorate, Syria"                
[3] " al Qitar [train] street, al-Tawassiya area, north of Raqqah city centre, Raqqah governorate, Syria" 
+0

Existe-t-il aussi une solution sans 'lapply()' mais avec tidyr? Peut-être avec la fonction 'separator'? – Tdebeus

+0

@Tdebeus Il pourrait y avoir, mais je ne suis pas un gars tidyr. – G5W

0

Voici un one-liner.

sapply(strsplit(example$Place, ","), function(x) trimws(x[length(x)])) 

Il retournera la chaîne après la virgule, que ce soit Syria ou tout autre.