从具有多个数字的数字中分割出一个字符

zac*_*ach 5 string r

我在数据框中有一列,其中的值是字母数字组合,如G1,K8,A132等.我想从数字中拆分字母,但将数字保留为单个数字.我一直在使用strsplit但是这给值的列表,看到下面,我将liek有输出G10:

x <- "G10"
strsplit(x, "")[[1]][1]
"G"
strsplit(x, "")[[1]][-1]
"1" "0"
Run Code Online (Sandbox Code Playgroud)

当我尝试将数字用作数字时,这会导致可预测的下游问题.这是一个paste我希望得到"somethingelse_10" 的 例子:

z <-strsplit(x, "")[[1]][-1]
paste("somethingelse",z, sep="_")
"somethingelse_1" "somethingelse_0"
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以从字母中分割数字?

aar*_*njg 14

您可以使用gsub消除所有非数字或所有数字字符,如下所示:

> x <- "A3"
> gsub("[^[:digit:]]","",x)
"3"
> gsub("[:digit:]","",x)
"A"
Run Code Online (Sandbox Code Playgroud)

然后as.numeric,如果您愿意,您可以使用从字符串转换为数字.

  • @aaronjg 要获取字母,您需要一对额外的 [] (2认同)

jor*_*ran 9

stringr包往往有这样的事情便捷的功能:

require(stringr)
str_extract(c("A1","B2","C123"),"[[:upper:]]")
#[1] "A" "B" "C"
str_extract(c("A1","B2","C123"),"[[:digit:]]+")
#[1] "1"   "2"   "123"
Run Code Online (Sandbox Code Playgroud)

这假设每个元素只有一个"字母"部分和一个"数字"部分,因为str_extract它只是拉出匹配的第一个实例.