将字符串拆分为R中不同长度的子字符串

时间:2015-06-12 15:40:36

标签: r string

我读过类似的主题,但我的子串有不同的长度(每个9,3,5个字符),因此没有找到任何答案。

我需要将17个字符长的字符串拆分为三个子字符串,其中第一个长度为9,下一个长度为3,最后一个长度为5个字符。

示例:

 N12345671004UN005
 N34567892902UN002 

我想将字符串拆分为三列:

第一个col 9 char.length

"N12345671"      
"N34567892"

第二个col 3 char.length

"004"          
"902"

第三列5 char.length

"UN005"  
"UN002"

2 个答案:

答案 0 :(得分:5)

您可以尝试read.fwf并指定widths

ff <- tempfile()
cat(file=ff, instr, sep='\n')
read.fwf(ff, widths=c(9,3,5), colClasses=rep('character', 3))
#        V1  V2    V3
#1 N12345671 004 UN005
#2 N34567892 902 UN002

或使用tidyr/dplyr

library(dplyr)
library(tidyr)
as.data.frame(instr) %>%
       extract(instr, into=paste0('V', 1:3), '(.{9})(.{3})(.{5})')
#         V1  V2    V3
#1 N12345671 004 UN005
#2 N34567892 902 UN002

subread.table

的组合
read.table(text=sub('(.{9})(.{3})(.{5})', '\\1 \\2 \\3', instr),
              colClasses=rep('character', 3))
#         V1  V2    V3
#1 N12345671 004 UN005 
#2 N34567892 902 UN002

数据

instr = c("N12345671004UN005", "N34567892902UN002")

答案 1 :(得分:4)

instr = c("N12345671004UN005", "N34567892902UN002")
out1 = substr(instr, 1, 9)
out2 = substr(instr, 10, 12)
out3 = substr(instr, 13, 17)