在R中把文本文件转换为数据框架[英] Converting text file into data frame in R

问题描述

我的原始数据位于文本文件中,在值之间没有特定的特定器,例如:

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

应用read.T中的t在r中创建一个数据框,每行只有一个变量,而我想要一个数据框架,每行10个变量(10个值中的一个).如果文本文件中没有定界符,我该如何实现?

推荐答案

我们假设每个字段由非空间组成,除了可能嵌入空间的字段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生产L读取文件.然后在 gsubfn package 中使用gsubfn. 最后,使用read.table在g中读取文本来创建数据框架:

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)

输出.最后一行的结果是:

   V1    V2 V3 V4      V5                 V6   V7   V8   V9  V10
1 101 10.08  S  A 05OCT93 GOLDEN GATE BRIDGE 4110 6548 6404 1010
2 101 10.08  S  A 05OCT93 GOLDEN GATE BRIDGE 4110 6548 6404 1010

其他推荐答案

您确定只有十列吗?

> 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

其他推荐答案

另一种可能性是这是固定宽度格式文件.如果您发布了几行:

,我们将更好地了解这种可能性
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

本文地址:https://www.itbaoku.cn/post/902472.html