我有一個包含不同名稱的列,我想在第二個字符空間之后獲取所有字串。
我的例子。
df <- data.frame(col = c("Adenia macrophylla", "Adinobotrys atropurpureus (Wall.) Dunn", "Ardisia purpurea Reinw. ex Blume"))
我想要的結果是這樣的
col
1
2 (Wall.) Dunn
3 Reinw. ex Blume
對我有什么建議嗎?我之前的方法是對separate他們和unite,但我考慮我們是否有任何奇特的方法或更好的方法來做,因為我已經有很多專欄了。
更新 一下就解決了
xx %>%
mutate(col = str_pad(col, 20,"right")) %>%
mutate(col = str_remove(col, '\\w \\s\\w \\s'))
感謝@Ronak 和@U12-Forward 為我提供 regex
uj5u.com熱心網友回復:
你可以使用sub-
sub('\\w \\s\\w \\s', '', df$col)
#[1] "(Wall.) Dunn" "Reinw. ex Blume"
#Also
#sub('.*?\\s.*?\\s', '', df$col)
如果你想要一個tidyverse答案。
library(dplyr)
library(stringr)
df %>% mutate(val = str_remove(col, '\\w \\s\\w \\s'))
uj5u.com熱心網友回復:
如果您想在 n 個空格之后選擇字串,最好在sub.
sub("([^ ]* ){2}(.*)|.*", "\\2", df$col)
#sub("([^ ]* ){2}|.*", "", df$col, perl=TRUE) #Alternative
#[1] "" "(Wall.) Dunn" "Reinw. ex Blume"
[^ ]獲取所有但不是空格的所有內容*0 到 n 次, 匹配一個空格,{2}匹配兩次,.*匹配所有內容。
uj5u.com熱心網友回復:
或者使用這個正則運算式:
df$col <- sub('^\\S \\s \\S ', '', df$col)
輸出df:
> df
col
1
2 (Wall.) Dunn
3 Reinw. ex Blume
>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316166.html
上一篇:使WCF主機與NetNamedPipeBinding在Windows10上可以從每個人那里到達。
下一篇:在同一個WCF系結中同時使用HTTP和HTTPS-在代碼中把<安全模式="Transport">改為<安全模式="TransportCredential
