我有一个类似下面的数据,需要提取任何数字之前的文本。或者如果我们可以将文本和数字分开,那么它会很棒
df<-c("axz123","bww2","c334")
输出
"axz", "bww", "c"
或
"axz","bww","c"
"123","2","334"
答案 0 :(得分:3)
我们可以使用[:alpha:]
来匹配字母字符,并将其与gsub()
结合使用,并使用否定删除所有非字母字符:
gsub("[^[:alpha:]]", "", df)
#[1] "axz" "bww" "c"
要获得非字母字符,我们可以放弃否定^
:
gsub("[[:alpha:]]", "", df)
#[1] "123" "2" "334"
答案 1 :(得分:3)
我们可以这样做:
df <- c("axz123","bww2","c334")
gsub("\\d+", "", df)
#[1] "axz" "bww" "c"
gsub("(\\D+)", "", df)
#[1] "123" "2" "334"
对于你的另一个例子:
df <- "BAILEYS IRISH CREAM 1.75 LITERS REGULAR_NOT FLAVORED"
gsub("\\d.*", "", df)
#[1] "BAILEYS IRISH CREAM "
gsub("[A-Z_ ]*", "", df)
#[1] "1.75"
答案 2 :(得分:1)
使用str_extract
和正则表达式的外观。我们在任意数字((?=\\d)
)之前匹配一个或多个字符并提取它。
library(stringr)
str_extract(df, "[[:alpha:]]+(?=\\d)")
#[1] "axz" "bww" "c"
如果我们需要分隔数字和非数字,可以使用strsplit
lst <- strsplit(df, "(?<=[^0-9])(?=[0-9])", perl=TRUE)