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

r file space delimited

57721 观看

4回复

我有大数据集,包括大约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)

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

作者: Pawan 的来源 发布者: 2019 年 8 月 26 日

回应 (4)


72

决定

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

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

从手册:

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

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

作者: Simon O'Hanlon 发布者: 07.06.2013 08:51

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.
作者: littlebird 发布者: 28.08.2018 07:16

1

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

作者: cmbarbu 发布者: 30.11.2015 03:16

0

fread(...,sep =“”)可以处理大型数据集。

作者: Suresh Venkateswaran 发布者: 26.08.2019 03:19
32x32