我有一个以下的txt文件:
Header1 Header2 Header3
1 5 {Joe, John, Sam}
2 9 {Mike}
3 5 {Bob, Alice}
我试图用以下命令读取它,但是它给出了一个错误:
data = read.table("file_location/data.txt", sep=" ", strip.white=TRUE, header=TRUE)
more columns than column names
我如何阅读此类文件?
答案 0 :(得分:2)
这很简单:
> read.table(text = chartr("{}", "''", readLines("data.txt")), header = TRUE)
Header1 Header2 Header3
1 1 5 Joe, John, Sam
2 2 9 Mike
3 3 5 Bob, Alice
关键部分是使用chartr
将大括号替换为单引号。
答案 1 :(得分:0)
这样做不会替换字符。 read.pattern
提取捕获组(与正则表达式的括号部分匹配的文本)并将它们排列到data.frame中。我们分别阅读标题。例如,text = Lines
部分可以替换为"myfile"
,以便从文件中读取文字。
# test data
Lines <- "Header1 Header2 Header3
1 5 {Joe, John, Sam}
2 9 {Mike}
3 5 {Bob, Alice}"
library(gsubfn)
DF <- read.pattern(text = Lines, pattern = "^ *(\\S+) (\\S+) (.*)", skip = 1,
as.is = TRUE, col.names = read.table(text = Lines, as.is = TRUE, nrow = 1))
,并提供:
Header1 Header2 Header3
1 1 5 {Joe, John, Sam}
2 2 9 {Mike}
3 3 5 {Bob, Alice}
此处显示正则表达式的可视化:
^ *(\S+) (\S+) (.*)