2017-10-12 52 views
0

我正在處理一個數據集,其中一列(Place)由一個位置語句組成。從右到左在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")) 

我想所以我更喜歡與tidyverse package一個解決Place列由逗號分隔符分割。由於Place的值有不同的長度,我想從右到左開始。因此國家Syria是此數據框最後一列的值。

噢,對於RegEx代碼的獎金,我會刪除阿拉伯字符嗎?

在此先感謝。

編輯:發現我的答案是: 對於消除阿拉伯字符(感謝@ g5w):

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

和分裂的tidyr方式在列:

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

回答

1

剛剛拆分字符串在逗號和相反它。

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" 

要分裂之前擺脫阿拉伯字符,儘量

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

是否還有一個解決方案沒有'lapply()'但tidyr?也許用'separator'函數? – Tdebeus

+0

@Tdebeus可能有,但我不是一個tidyr傢伙。 – G5W

0

這裏是一個一行。

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

將最後一個逗號後會返回一個字符串,無論是Syria或任何其他。