如何将输入文本文件的一行读入data.frame中的多行?

时间:2014-06-10 07:13:16

标签: r

我正在尝试使用

这样的行来读取文本文件
1600Q   WASHERS=10|FLAT WASHERS=14
1700R   BUCKETS=25|PAILS=20|BASKETS=6

进入像

这样的数据框
1600Q   WASHERS 10
1600Q   FLAT WASHERS    14
1700R   BUCKETS 25
1700R   PAILS   20
1700R   BASKETS 6

使用

raw.data <- read.table("myData.txt",sep="\t",fill=TRUE, header=FALSE,quote = "")

我的行看起来像

1600Q   WASHERS=10|FLAT WASHERS=14
1700R   BUCKETS=25|PAILS=20|BASKETS=6

我读书时有没有办法分开?

2 个答案:

答案 0 :(得分:0)

基于agstudy的建议,这里是我如何处理输入文件的每一行,我将用read.table读取,假设唯一的空白位于&#34;之间。 1600Q&#34;和零件清单。如果还有其他空格,则必须进行调整。 下面的行可以压缩,但这详细说明了所采取的步骤。

# make a fake pair of strings, assuming no other tab separators in file
indat <- c('1600Q' , 
         'WASHERS=10|FLAT WASHERS=14|WASHERS=11|FLAT WASHERS=15|WASHERS=12|FLAT WASHERS=16')
pairs  <- unlist(strsplit(indat[2],'[|]'))
outcol <- matrix(nr=length(pairs),nc=2)
for(j in 1:length(pairs) ) {
    outcol[j,] <- unlist(strsplit(pairs[j],"=") )
    }
finalmat <- cbind(rep(indat[1],nrow(outcol)),outcol)

答案 1 :(得分:-1)

这里有一种方式:

ll <- strsplit(gsub('([A-Z])[  ]+','\\1=',
          ' 1600Q   WASHERS=10|FLAT WASHERS=14'),'[|]')

read.table(text=unlist(ll),sep='=')

##       V1      V2 V3
## 1  1600Q WASHERS 10
## 2   FLAT WASHERS 14
  1. 使用regex
  2. 为每一行制作相同的分隔符=
  3. 使用strsplit
  4. 分隔行
  5. 使用read.table
  6. 阅读全部内容
相关问题