【问题标题】:Structuring a large text file into a dataframe using R使用 R 将大型文本文件构造成数据框
【发布时间】:2019-02-15 15:18:53
【问题描述】:

我有一个大约 20 页的文本文件,大约有 200 个段落。每段包含三行描述这样一个人的信息:

Name: John
Age: 26
Phone number: 123421

Name: Mary
Age: 80
Phone number: NA

...

现在我希望将这个大文件转换为一个数据框,其中的列代表三个变量名称、年龄和电话号码,其中的行对应于人员。

Name      Age      Phone number
John      26       123421
Mary      80       NA
...       ...      ...

如何将大文本文件转换成这样的数据框?

【问题讨论】:

标签: r text text-mining


【解决方案1】:

不漂亮,但这里有一个正则表达式选项,可能会根据数据的读取方式起作用,

test<-
"Name: John
Age: 26
Phone number: 123421

Name: Mary
Age: 80
Phone number: NA
"

这被读作:

[1] "Name: John\nAge: 26\nPhone number: 123421\n\nName: Mary\nAge: 80\nPhone number: NA\n"

现在使用正则表达式获取所有匹配项,始终捕获 NA 以确保相同的行数:

Names<-regmatches(test, gregexpr("(?<=Name: )[a-zA-Z]+", test, perl=TRUE))

Numbers<-regmatches(test, gregexpr("(?<=Phone number: )[a-zA-Z0-9]+", test, perl=TRUE))

Age<-regmatches(test, gregexpr("(?<=Age: )[a-zA-Z0-9]+", test, perl=TRUE))

df<-data.frame(Names,Numbers,Age)
names(df)<-c("Name","Number","Age")

> df
  Name Number Age
1 John 123421  26
2 Mary     NA  80

如果使用read.csv 读入此方法,以下是如何格式化数据

test<-read.csv(text=test, header=F, stringsAsFactors=FALSE)
test<-list(test$V1)
test<-paste(unlist(test), collapse =" ")
>test
[1] "Name: John Age: 26 Phone number: 123421 Name: Mary Age: 80 Phone number: NA"

如果您有姓氏,我们的 Names 参数的正则表达式也需要更改:

(?&lt;=Name: ).+?(?=Age)

【讨论】:

    【解决方案2】:

    base R 中的read.dcf() 是为读取此类数据而构建的:

    read.dcf(textConnection(test), all = TRUE)
    
      Name Age Phone number
    1 John  26       123421
    2 Mary  80           NA
    

    可以在help("read.dcf") 找到 DCF(“Debian 控制文件”)格式的简要说明。

    数据

    test <-
    "Name: John
    Age: 26
    Phone number: 123421
    
    Name: Mary
    Age: 80
    Phone number: NA
    "
    

    【讨论】:

    • 这是一个很棒的包我直到现在还没有听说过,这应该被考虑为接受的答案。
    • 谢谢,@Chabo。该函数是基础 R 的一部分,因此不需要任何包。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2023-04-05
    相关资源
    最近更新 更多