将文本读入data.frame,其中字符串值包含空格

时间:2015-05-28 03:00:42

标签: r read.table

当包含空格干扰read.table的字符串值时,将打印的data.frame中的文本读取到data.frame的最简单方法是什么?例如,此data.frame摘录不会产生问题:

     candname party elecVotes
1 BarackObama     D       365
2  JohnMcCain     R       173

我可以将其粘贴到read.table来电,没有问题:

dat <- read.table(text = "     candname party elecVotes
1 BarackObama     D       365
2  JohnMcCain     R       173", header = TRUE)

但是如果数据的字符串包含这样的空格:

      candname party elecVotes
1 Barack Obama     D       365
2  John McCain     R       173

然后read.table抛出错误,因为它将“Barack”和“Obama”解释为两个独立的变量。

1 个答案:

答案 0 :(得分:7)

将文件读入L,删除行号并使用带有指定正则表达式的sub在其余字段之间插入逗号。 (请注意,"\\d"匹配任何数字,"\\S"匹配任何非空白字符。)现在使用read.csv重新读取它:

Lines <- "      candname party elecVotes
1 Barack Obama     D       365
2  John McCain     R       173"

# L <- readLines("myfile")  # read file; for demonstration use next line instead
L <- readLines(textConnection(Lines))

L2 <- sub("^ *\\d+ *", "", L)  # remove row numbers
read.csv(text = sub("^ *(.*\\S) +(\\S+) +(\\S+)$", "\\1,\\2,\\3", L2), as.is = TRUE)

,并提供:

      candname party elecVotes
1 Barack Obama     D       365
2  John McCain     R       173

以下是正则表达式的可视化:

^ *(.*\S) +(\S+) +(\S+)$

Regular expression visualization

Debuggex Demo