我有一些数据需要拆分成多个元素,但是要拆分的行中没有特定的标识符。我知道不同变量的位置;有没有办法可以根据我的先前信息将字符串分成多个不均匀的部分。例如:
字符串:" 00008 L 1957110642706 194711071019561030R 1/812.5000000"
期望的结果:
" 00008 "," ","L"," "," ","19571106","42706"," ","19471107","10","19561030","R 1/8","12.5000000"
所以,我先前的信息是第一个元素从第一个位置开始,长度为七个空格;第二个位于字符串的第8个位置,长度为8个空格;第3个元素从第16个位置开始,是1个空格长等,等等。
答案 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包更快。