r - 使用 R 将大型文本文件构建为数据框

标签 r text text-mining

我有一个大约 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
...       ...      ...

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

最佳答案

不太漂亮,但这里有一个正则表达式选项,它的工作原理取决于数据的读入方式,

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参数也需要改变:

(?<=Name: ).+?(?=Age)

关于r - 使用 R 将大型文本文件构建为数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54712257/

相关文章:

R:将无序长数据转换为宽数据

javascript - 在每行达到特定字符限制时在文本编辑器中自动输入

oracle:COMMENT 的 Oracle 等效数据类型是什么?

python - 从列中删除空格上的行

python - 如何在 Python 中使用 PCA 来构建术语文档矩阵?

r - 在 data.frame 的 ggplot 图例中添加信息

c++ - 如何读取大 json?

Java-Swing : Setting Selected Text Color with HTML

r - 使用 tidytext 保留 ngrams 分析中的连字符单词

r - 交互式图表中的订单栏