将字符串拆分为不相等的段R

时间:2016-10-17 19:55:41

标签: r

我有一些数据需要拆分成多个元素,但是要拆分的行中没有特定的标识符。我知道不同变量的位置;有没有办法可以根据我的先前信息将字符串分成多个不均匀的部分。例如:

字符串:" 00008 L 1957110642706 194711071019561030R 1/812.5000000"

期望的结果:

" 00008 ","        ","L","       ","    ","19571106","42706","          ","19471107","10","19561030","R 1/8","12.5000000"

所以,我先前的信息是第一个元素从第一个位置开始,长度为七个空格;第二个位于字符串的第8个位置,长度为8个空格;第3个元素从第16个位置开始,是1个空格长等,等等。

2 个答案:

答案 0 :(得分:1)

xstr <- " 00008         L           1957110642706          194711071019561030R 1/812.5000000"

而不是使用此描述:

  

第一个元素从第一个位置开始,长度为七个空格;第二个位于字符串的第8个位置,长度为8个空格;第3个元素从第16个位置开始,是1个空格长等,等等......

我将从您指定的答案(nchar(res))中获取所需的宽度:

res <- c(" 00008 ","        ","L","       ","    ","19571106","42706","          ","19471107","10","19561030","R 1/8","12.5000000")

确保所有变量都被读取为字符串:

res2 <- read.fwf(textConnection(xstr),widths=nchar(res),
         colClasses=rep("character",length(res)))

测试:

all.equal(unname(unlist(res2)),res)  ## TRUE

答案 1 :(得分:0)

您还可以在读取数组上使用简单的substr函数:

my_lines <- read.table("your_file") #Or whatever way you read the lines

firstColumn <- substr(my_lines,1,7) #you can also use as.numeric and others if needed
secondColumn <- substr(my_lines,8,11)
# ..etc
rm(my_lines) #to save memory

有时,如果你没有正确使用它们,这实际上比其他read.something包更快。