【问题标题】:How can I importsmessy text files in R如何在 R 中导入混乱的文本文件
【发布时间】:2021-10-08 09:04:19
【问题描述】:

是否有人对如何导入如下所示的文本文件有一些建议:

"X1"II"X2"II"X3"II"X4"II"X5"""1"II4II"123-23"II01-03-2006II"209"II"1"II5II"124-23" II02-03-2006II"208"II....(等等)?

到 R 并将其转换为数据框?所以我想实现这样的目标:

| X1 | X2 |X3 | X4 | X5 | | -- | -- | -------- | ---------- | --- | | 1 | 4 | 123-23 | 01-03-2006 | 209 | | 1 | 5 | 124-23 | 02-03-2006 | 208 |
.....

我设法使用 read.file 将其作为长字符串导入,但之后就卡住了。 感谢您的帮助。

【问题讨论】:

  • 在给定该字符串的情况下,您希望达到哪个结果?
  • 我想创建一个数据框(以示例为例)5 列 X1-X5

标签: r csv import text-files delimiter


【解决方案1】:

我将您的文本复制到一个文本文件中,

"X1"II"X2"II"X3"II"X4"II"X5"""1"II4II"123-23"II01-03-2006II"209"II"1"II5II"124-23"II02-03-2006II"208"

从检查看来

  • 标题行是X1 X2 X3 X4 X5
  • 列由II分隔。
  • 换行指示符是那个矩形,在使用readr::read_file读入后变成\v

基于此,您正在寻找具有 5 列的 data.frame。注意:一些行尾出现在II 之后(如“209”II),这很奇怪,因为它暗示了行尾(我不得不在下面的代码中添加一个修复)。

由于read.table 之类的函数要求sep 变量为1 字节,因此您不能使用read.table(file = 'text.txt', sep = 'II') 之类的函数。所以目前的工作解决方案是

library(magrittr)
library(stringr)
library(readr)

text <- readr::read_file(file = 'C:/Users/lcroote/my_data/read_test.txt')

text %>% 
  str_replace_all('\"', '') %>% # remove escaped quotes (readr thing)
  str_replace_all('II', ',') %>% # columns separated by II
  str_replace_all(',\v', '\n') %>% # some line endings have extra ,
  str_replace_all('\v', '\n') %>%  # replace \v by newline \n for read.table
  read.table(text = ., sep = ',', header = T, fill = T, row.names = NULL)
>
   X1 X2     X3         X4  X5
1  1  4 123-23 01-03-2006 209
2  1  5 124-23 02-03-2006 208

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 2016-10-23
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多