[英]Conditional replacing with str_replace
我有這樣的數據:
d = as.character(c("1,23", "1,23.23", "1.23", "-1.2", "1,23.234"))
如果一個字符串有一個標點符號和一個逗號,我想刪除標點符號和標點符號本身后面的字符。
結果應如下所示:
d = as.character(c("1,23", "1,23", "1.23", "-1.2", "1,23"))
問題是我不能使用str_replace,因為它也會刪除其他字符串。
library(stringr)
str_replace(d,"\\.[0-9]+", "")
[1] "1,23" "1,23" "1" "-1" "1,23"
我們可以匹配一個或多個數字的模式,后跟逗號或點和一個或多個數字,捕獲為一個組( (...)
),在替換中,使用組的反向引用( \\\\1
)
sub("^(-?\\d+[,.]\\d+).*", "\\1", d)
#[1] "1,23" "1,23" "1.23" "-1.2" "1,23"
或者在str_replace
使用相同的模式
library(stringr)
str_replace(d, "^(-?\\d+[,.]\\d+).*", "\\1")
#[1] "1,23" "1,23" "1.23" "-1.2" "1,23"
由於我們的數據似乎有效,因此如果外觀可以使用,則此表達式可能有效:
(?<=,)(.+)(\..+)
在這里,我們只會捕獲那些我猜測不合適的數字。
我們的代碼可能如下所示:
str_replace(d, "(?<=,)(.+)(\..+)", "\\1")
要么
sub("(?<=,)(.+)(\..+)", "\\1", d)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.