我的原始数据位于文本文件中,值之间没有特定的分隔符,如下所示:
101 10.08 S A 05OCT93 GOLDEN GATE BRIDGE 4110 6548 6404 55930
在R中应用read.table创建一个每行只有一个变量的数据帧,而我想要一个每行有10个变量的数据帧(10个值中的每一个都有一个)。如果文本文件中没有分隔符,我该如何实现?
答案 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