我正在嘗試在資料框的一列中的-字母S和任何數字之間添加一個。所以,這是一個例子:
VariableA
TRS34
MMH22
GFSR104
GS23
RRTM55
P3
S4
我想要的輸出是:
VariableA
TRS-34
MMH22
GFSR104
GS-23
RRTM55
P3
S-4
我正在嘗試使用gsub:
gsub('^([a-z])-([0-9] )$','\\1d\\2',myDF$VariableA)
但這不起作用。
我該如何解決這個問題?謝謝!
uj5u.com熱心網友回復:
您的^([a-z])-([0-9] )$正則運算式嘗試匹配以字母開頭的字串,然后是一個-,然后是一個或多個數字。這行不通,因為字串中沒有連字符,您想將其引入字串中。
您可以使用
gsub('(S)([0-9])', '\\1-\\2', myDF$VariableA)
該(S)([0-9])正則運算式匹配和捕獲S到組1( \1),然后任何數字被捕獲到2組(\2)和替換模式是組值在它們之間具有連字符的級聯。如果預期只有一個替換,則替換gsub為sub。
請參閱正則運算式演示和在線 R 演示。
其他變體:
gsub('(S)(\\d)', '\\1-\\2', myDF$VariableA) # \d also matches digits
gsub('(?<=S)(?=\\d)', '-', myDF$VariableA, perl=TRUE) # Lookarounds make backreferences redundant
uj5u.com熱心網友回復:
如果你設定了,你也可以使用lookbehinds perl=TRUE:
> gsub('(?<=S)([0-9] )', '-\\1', myDF$VariableA, perl=TRUE)
[1] "TRS-34" "MMH22" "GFSR104" "GS-23" "RRTM55" "P3" "S-4"
>
uj5u.com熱心網友回復:
這是我喜歡使用的版本sub:
myDF$VariableA <- gsub('S(\\d)', 'S-\\1', myDF$VariableA)
這僅需要使用一個捕獲組。
uj5u.com熱心網友回復:
使用stringr包
library(stringr)
str_replace_all(myDF$VariableA, 'S(\\d)', 'S-\\1')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/326970.html
