当包含空格干扰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”解释为两个独立的变量。
答案 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+)$