【问题标题】:how to create a data frame from multiple text files using r? [closed]如何使用 r 从多个文本文件创建数据框? [关闭]
【发布时间】:2014-12-06 20:44:11
【问题描述】:

我是 R 编程新手...

我有多个文本文件,每行都有一个单词:

我想导入所有的文本文件并创建一个数据框。像这样:

library(rTextTools)
data(USCongress)
View(USCongress)

我希望单词在一行中,然后创建一个带有变量“文本”的 data.frame,就像在参考数据中一样(USCongress) 请帮忙

会话信息:

R version 3.0.3 (2014-03-06)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] magrittr_1.5     RTextTools_1.4.2 SparseM_1.05    

loaded via a namespace (and not attached):
 [1] bitops_1.0-6        BradleyTerry2_1.0-5 brglm_0.5-9         car_2.0-21          caret_6.0-37        caTools_1.17.1     
 [7] class_7.3-9         codetools_0.2-8     coin_1.0-24         colorspace_1.2-4    digest_0.6.4        e1071_1.6-4        
[13] foreach_1.4.2       ggplot2_1.0.0       glmnet_1.9-8        grid_3.0.3          gtable_0.1.2        gtools_3.4.1       
[19] ipred_0.9-3         iterators_1.0.7     kernlab_0.9-19      lattice_0.20-27     lava_1.2.6          lme4_1.1-7         
[25] MASS_7.3-35         Matrix_1.1-2        maxent_1.3.3.1      minqa_1.2.4         modeltools_0.2-21   munsell_0.4.2      
[31] mvtnorm_1.0-1       nlme_3.1-113        nloptr_1.0.4        nnet_7.3-8          parallel_3.0.3      party_1.0-18       
[37] plyr_1.8.1          prodlim_1.4.5       proto_0.3-10        randomForest_4.6-10 Rcpp_0.11.3         reshape2_1.4       
[43] rpart_4.1-5         sandwich_2.3-2      scales_0.2.4        slam_0.1-32         splines_3.0.3       stats4_3.0.3       
[49] stringr_0.6.2       strucchange_1.5-0   survival_2.37-7     tau_0.0-18          tm_0.5-10           tools_3.0.3        
[55] tree_1.0-35         zoo_1.7-11

我试过这个:

Data <- paste0("h:/desktop/datasci/new",list.files("~/new/")) %>%
+     sapply(.,read.table) %>%
+     do.call(rbind,.) %>%
+     apply(.,1,paste0,collapse=" ") %>%
+     data.frame(text=.,row.names=NULL) 

但这给了我一个错误:

Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
  cannot open file 'h:/desktop/datasci/new': Permission denied

谢谢

【问题讨论】:

  • 您以什么方式试图使您的数据类似于上面的USCongress 数据?例如。每个文本文件都应该变成一个句子/单词串,就像text列中的单行?或者不同文件中相对位置相同的单词应该合并,即每个文件中的第一个单词合并成一个句子,等等...?
  • 我希望单词在一行中,然后创建一个带有变量“文本”的 data.frame,就像在参考数据中一样(USCongress)
  • 您是否尝试过编码?你所面临的挑战究竟是什么?数据图像并不是那么有用。尝试使用特定的样本输入和所需的输出制作reproducible example。 USCongress 数据似乎有一堆与您的数据无关的其他列。
  • @MrFlick .... 我只需要美国国会数据的“文本”列..
  • 你想要一个单列的data.frame吗?您是否在您的数据上尝试过read.table()?这怎么不返回你想要的?

标签: r nlp rstudio


【解决方案1】:

这是一种方法,其中.txt 文件位于目录"~/tempfiles/" 中:

library(magrittr)
##
Df <- paste0("~/tempfiles/",list.files("~/tempfiles/")) %>%
  sapply(.,read.table) %>%
  do.call(rbind,.) %>%
  apply(.,1,paste0,collapse=" ") %>%
  data.frame(text=.,row.names=NULL)
R> Df
                                                         text
1 file1_line1 file1_line2 file1_line3 file1_line4 file1_line5
2 file2_line1 file2_line2 file2_line3 file2_line4 file2_line5
3 file3_line1 file3_line2 file3_line3 file3_line4 file3_line5

您当然可以不使用magrittr 来做到这一点,但它比查看一堆嵌套函数调用要干净得多。

对于上面的示例,我只是在一个废弃目录~/tempfiles/ 中创建了三个废话.txt 文件:

R> list.files("~/tempfiles/")
[1] "file1.txt" "file2.txt" "file3.txt"

看起来像这样:

R> read.table("~/tempfiles/file1.txt")
           V1
1 file1_line1
2 file1_line2
3 file1_line3
4 file1_line4
5 file1_line5
R> read.table("~/tempfiles/file2.txt")
           V1
1 file2_line1
2 file2_line2
3 file2_line3
4 file2_line4
5 file2_line5

etc...sapply 用于遍历目标目录中的所有文件,并使用do.call(rbind(...)) 将结果组合成一个 [3 x 5] 数组。这被传送到apply,我们将 5 列中的每一列折叠成一个向量(长度为 3),最后做成一个data.frame

【讨论】:

  • 我收到此错误:文件中的错误(文件,“rt”):无法打开连接另外:警告消息:在文件中(文件,“rt”):无法打开文件'h :/desktop/datasci/new': 权限被拒绝
  • 请将在您的文件目录(大概是h:/desktop/datasci/)上调用list.files 的输出添加到您的问题中。这看起来像是一个典型的痛苦问题,只发生在 Windows 上。当您使用它时,您可以运行sessionInfo() 并包含它吗?
  • 我不确定您是否可以在 Windows 上使用波浪号扩展;我正在使用 Linux,其中 ~/ 只是 /home/nathan/ 的缩写。尝试使用paste0("h:/desktop/datasci/new",list.files("h:/desktop/datasci/new")),将相同的文件目录传递给paste0list.files
  • 对不起,应该是paste0("h:/desktop/datasci/new/",list.files("h:/desktop/datasci/new/"))new后面的/你传递给paste0的字符串是必须的,否则你的文件路径不正确。
猜你喜欢
  • 2021-12-28
  • 2020-07-02
  • 2021-12-28
  • 2022-01-17
  • 1970-01-01
  • 2022-06-21
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多