R用大括号读取文件

R read file with curly braces

我有以下 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

如何读取这样的文件?

这很简单:

> 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将大括号替换为单引号。

这将在不替换字符的情况下完成。 read.pattern 提取捕获组(匹配正则表达式括号部分的文本)并将它们排列成 data.frame。我们分别阅读header。 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+) (.*)

Debuggex Demo