读取包含Col:ColData等数据的Textfile

时间:2016-03-06 11:33:57

标签: r

我想编写一个可以读取文本文件并将其转换为Tabular形式的解析器,文本文件的格式为:

textfile.txt 
--------------------------------
colA: dataA
colB: dataB
colC: dataC 

ColA: dataA
ColB: dataB
ColC: dataC 
应该生成

ColA  ColB  ColC
dataA dataB dataC
dataA dataB dataC

如果有人可以帮助我,可以提供很大的帮助,因为我到处搜索它但我找不到解决方案。

1 个答案:

答案 0 :(得分:4)

据我所知,您的数据存在3个问题:

  1. 数据文件中的空行。
  2. 第一列中的某些值以大写字母开头,有些以小写字母开头。
  3. 数据不是您希望看到的格式(即:宽屏格式)
  4. 这可以解决如下:

    1)使用正确的分隔符和blank.lines.skip参数(可能还有fill=TRUE)来读取数据:

    mydf <- read.table(text="colA: dataA
    colB: dataB
    colC: dataC
    
    ColA: dataA
    ColB: dataB
    ColC: dataC", sep=":", header=FALSE, blank.lines.skip=TRUE)
    

    这给出了:

    > mydf
        V1     V2
    1 colA  dataA
    2 colB  dataB
    3 colC  dataC
    4 ColA  dataA
    5 ColB  dataB
    6 ColC  dataC
    

    2)将第一列中的值大写:

    mydf$V1 <- gsub('(^[a-z])','\\U\\1', mydf$V1, perl=TRUE)
    

    3)重塑为宽幅格式:

    library(data.table)
    dcast(setDT(mydf), rowid(V1) ~ V1, value.var = 'V2')[, V1 := NULL][]
    

    给出:

         ColA   ColB   ColC
    1:  dataA  dataB  dataC
    2:  dataA  dataB  dataC
    

    上述重塑解决方案使用development version (1.9.7) of data.table

    有关重塑数据的更多选择,请参阅"Transposing Long to Wide without Timevar"