分隔多个值(字符)和文本

我在Excel中有一个文件,例如在单元格中有这样的“4.56 / 505AB”文本。 数字与文本的长度一样都是不同的,所以文本可以是单个或多个字符,数字可以包含小数点或斜线等字符。

这个例子的理想分离格式是:列1 = 4.56 / 505,列2 = AB。

我已经尝试过了:Excel中的“Split_Text”,它从数字中删除了特殊字符,并生成以下输出:column 1 = 456505,column 2 = ./AB

R与“G_sub”命令,导致:[1]“4. 56/505 AB”

有没有办法进一步采取这些方法,或将这是一个手动修复? 谢谢!

假设第一个大写字母是第二列的开始

 df <- data.frame(c1 = c("4.56/505AB", "1.23/202CD")) library(stringr) df$c2 <- str_extract(df$c1, "[^[AZ]]+") df$c3 <- str_extract(df$c1, "[AZ]+") df # c1 c2 c3 # 1 4.56/505AB 4.56/505 AB # 2 1.23/202CD 1.23/202 CD 

1)sub / read.table匹配两个捕获组中的前导字符和尾随字符,并用分号分隔。 然后阅读使用read.table。 没有包被使用。

 x <- "4.56/505AB" pat <- "^([0-9.,/]+)(.*)" read.table(text = sub(pat, "\\1;\\2", x), sep = ";", as.is = TRUE) ## V1 V2 ## 1 4.56/505 AB 

结果有字符列,但如果你喜欢因素,那么省略as.is = TRUE 。 我们还假定在input中没有分号,但是如果有的话使用其他字符,而不是在分号出现的两个地方用分号input。

1a)如果我们可以假定第二列总是以一个字母开始,那么我们可以用分号后面跟着这个字母来代替遇到的第一个字母,然后用read.table读取它。 这具有使用简单的图案的优点。

 read.table(text = sub("([[:alpha:]])", ";\\1", x), sep = ";", as.is = TRUE) 

2)read.pattern使用相同的inputx和模式pat ,使用gsubfn包中的read.pattern甚至更短:

 library(gsubfn) read.pattern(text = x, pattern = pat, as.is = TRUE) ## V1 V2 ## 1 4.56/505 AB 

更新:修改。