2017-05-08 87 views
1

我試圖刪除包含多個字符串的數據框中最後兩個單詞之間的空白。我曾嘗試使用gsub,但我的嘗試gsub("(\\s){1}$","",df1$V1)似乎相當錯誤! df1是我的數據集,df2是我之後的結果。刪除R中的字符串中最後兩個單詞之間的空白

df1 <- data.frame(V1=c("Apple Pear Orange, AAA 111", "Grapes Banana Pear . BBB 222", "Orange Kiwi Melon , CCC 333", "Apple DDD 444", "Kiwi Melon Orange CCC 333", "Apple Pear Orange, AAA 111", "Tomato Cucumber EEE 222", "Seagull Pigeon ZZZ 111"), stringsAsFactors = F) 

df2 <- data.frame(V1=c("Apple Pear Orange, AAA111", "Grapes Banana Pear . BBB222", "Orange Kiwi Melon , CCC333", "Apple DDD444", "Kiwi Melon Orange CCC333", "Apple Pear Orange, AAA111", "Tomato Cucumber EEE222", "Seagull Pigeon ZZZ111"), stringsAsFactors = F) 

回答

3

甚至這樣的:

gsub("(.*)\\s","\\1",df1$V1) 
+0

這適用於我真實數據集中的所有字符串。謝謝。 – Chris

3

您可以使用捕捉組:

sub("(.*)\\s+([^\\s]+)$", "\\1\\2", df1$V1) 
#[1] "Apple Pear Orange, AAA111" "Grapes Banana Pear . BBB222" "Orange Kiwi Melon , CCC333" "Apple DDD444"    
#[5] "Kiwi Melon Orange CCC333" "Apple Pear Orange, AAA111" "Tomato Cucumber EEE222"  "Seagull Pigeon ZZZ111" 

這捕獲作爲第一組中的任何數目的字符,然後1+空格和第二組1+不在位,直到的結束字符串。然後它只提取兩個捕獲組,而沒有間隔。

+0

你可以用'\\ w +'代替單詞嗎? 'gsub(「(\\ w +)(\\ w + $)」,「\\ 1 \\ 2」,df1 $ V1)'?只是一個想法... –

+1

@MikeH。,當然,但你爲什麼不建議這是一個單獨的答案? –

+0

謝謝。我不知道爲什麼,但是當hhh和Mike H.的答案時,您的語法不適用於我的實際數據集中的所有字符串。 – Chris

1

都會響起Docendo的回答,您可以使用\\w+匹配任何長度的話:

gsub("(\\w+)\\s+(\\w+$)", "\\1\\2" ,df1$V1) 

#[1] "Apple Pear Orange, AAA111" "Grapes Banana Pear . BBB222" "Orange Kiwi Melon , CCC333" 
#[4] "Apple DDD444"    "Kiwi Melon Orange CCC333" "Apple Pear Orange, AAA111" 
#[7] "Tomato Cucumber EEE222"  "Seagull Pigeon ZZZ111" 

然後你可以用同樣的想法與捕獲組。

+0

謝謝。這也正是我以前所做的,但是,首先回答我已經接受他們的解決方案作爲答案。 – Chris

相關問題