将文本文件转换为R中的数据框

时间:2013-11-30 07:01:32

标签: r import read.table

我的原始数据位于文本文件中,值之间没有特定的分隔符,如下所示:

101  10.08  S   A  05OCT93 GOLDEN GATE BRIDGE  4110   6548   6404   55930

在R中应用read.table创建一个每行只有一个变量的数据帧,而我想要一个每行有10个变量的数据帧(10个值中的每一个都有一个)。如果文本文件中没有分隔符,我该如何实现?

3 个答案:

答案 0 :(得分:2)

我们假设每个字段都包含非空格,除了字段6可能有嵌入空格。

创建测试文件

Lines <- "101 10.08 S A 05OCT93 GOLDEN GATE BRIDGE 4110 6548 6404 55930
101 10.08 S A 05OCT93 GOLDEN GATE BRIDGE 4110 6548 6404 55930
"
cat(Lines, file = "myfile.txt")

生成即可。使用生成readLines的{​​{1}}读取文件。然后在gsubfn package中使用L在生成gsubfn的字段之间插入由sep定义的字符。 最后使用g阅读g中的文字以创建数据框:

read.table

<强>输出即可。最后一行的结果是:

library(gsubfn)
L <- readLines("myfile.txt")

sep <- ";"  # choose any character not in the file

pat <- "(\\S+) (\\S+) (\\S+) (\\S+) (\\S+) (\\S.*\\S) (\\S+) (\\S+) (\\S+) (\\S+)"
pat <- gsub(" ", "\\s+", pat) # can omit if there is only 1 space between fields
g <- gsubfn(pat, ... ~ paste(..., sep = sep), L)

read.table(text = g, sep = sep)

答案 1 :(得分:1)

你确定只有十列吗?

> read.table(text="101 10.08 S A 05OCT93 GOLDEN GATE BRIDGE 4110 6548 6404 55930")
   V1    V2 V3 V4      V5     V6   V7     V8   V9  V10  V11   V12
1 101 10.08  S  A 05OCT93 GOLDEN GATE BRIDGE 4110 6548 6404 55930

答案 2 :(得分:1)

另一种可能性是这是一个固定宽度的格式文件。如果您发布了几行,我们会更好地理解这种可能性:

require(foreign)
txt2 <- "101  10.08  S   A  05OCT93 GOLDEN GATE BRIDGE  4110   6548   6404   55930"
read.fwf(file=textConnection(txt2), c(4,6,3,4,9,20,6,8,8,8))
   V1    V2  V3   V4        V5                   V6   V7   V8   V9   V10
1 101 10.08   S    A   05OCT93  GOLDEN GATE BRIDGE  4110 6548 6404 55930