读取带有多个空格的文本文件作为R中的分隔符

时间:2013-06-07 08:46:02

标签: r file space delimited

我有大数据集,包括大约94列和3百万行。此文件具有单个和多个空格作为列之间的分隔符。我需要在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)

因为,必须读入的文件有多个空格作为某些列之间的分隔符,所以上述方法不起作用。是否有任何方法可以有效地在此文件中使用。

3 个答案:

答案 0 :(得分:69)

您需要更改分隔符。 " "指的是一个空格字符。 ""将任何长度的空格称为分隔符

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

从手册:

  

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

此外,对于大型数据文件,您可能需要考虑data.table:::fread将数据快速直接读入data.table。今天早上我自己正在使用这个功能。它仍然是实验性的,但我发现它确实很有效。

答案 1 :(得分:3)

如果要改用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.

答案 2 :(得分:1)

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