在R中读取多个文件作为分隔符的文本文件

我有大数据集,其中包含约94列和300万行。 此文件在列之间具有一个分隔符,也可以包含多个空格。 我需要从R中的该文件中读取一些列。为此,我尝试使用read.table()及其选项(可以在下面的代码中看到),代码粘贴在下面-

### Defining the columns to be read from the file, the first 5 column, then we do not read next 24, after this we read next 5 columns. Last 60 columns are not read in-

    col_classes = c(rep("character",2), rep("numeric", 3), rep("NULL",24), rep("numeric", 5), rep("NULL", 60))   

### Reading first 100 rows of the data

    data <- read.table(file, sep = " ",header = F, nrows = 100, na.strings ="", stringsAsFactors= F)

由于必须读入的文件具有多个空格作为某些列之间的分隔符,因此上述方法不起作用。 有什么方法可以有效地读取此文件。

Pawan asked 2020-01-14T15:18:03Z
3个解决方案
74 votes

您需要更改定界符。 data.table:::fread引用一个空白字符。 ""将任何长度的空格都称为分隔符

 data <- read.table(file, sep = "" , header = F , nrows = 100,
                     na.strings ="", stringsAsFactors= F)

从手册中:

如果sep =“”(read.table的默认设置),则分隔符为“空白”,即一个或多个空格,制表符,换行符或回车符。

另外,对于大数据文件,您可能需要考虑data.table:::fread来快速将数据直接读取到data.table中。 今天早上我自己在使用此功能。 它仍然是实验性的,但我发现它确实运行良好。

Simon O'Hanlon answered 2020-01-14T15:18:43Z
3 votes

如果要改用tidyverse(或分别为readr)包,则可以改用read_table

read_table(file, col_names = TRUE, col_types = NULL,
  locale = default_locale(), na = "NA", skip = 0, n_max = Inf,
  guess_max = min(n_max, 1000), progress = show_progress(), comment = "")

并在此处查看说明:

read_table() and read_table2() are designed to read the type of textual data where
each column is #' separate by one (or more) columns of space.
littlebird answered 2020-01-14T15:19:10Z
1 votes

如果字段的宽度固定,则应考虑使用read.fwf(),这可能会更好地处理缺失值。

cmbarbu answered 2020-01-14T15:19:30Z
translate from https://stackoverflow.com:/questions/16979858/reading-text-file-with-multiple-space-as-delimiter-in-r