我想编写一个可以读取文本文件并将其转换为Tabular形式的解析器,文本文件的格式为:
textfile.txt
--------------------------------
colA: dataA
colB: dataB
colC: dataC
ColA: dataA
ColB: dataB
ColC: dataC
应该生成:
ColA ColB ColC
dataA dataB dataC
dataA dataB dataC
如果有人可以帮助我,可以提供很大的帮助,因为我到处搜索它但我找不到解决方案。
答案 0 :(得分:4)
据我所知,您的数据存在3个问题:
这可以解决如下:
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"