我有大数据集,包括大约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)
因为,必须读入的文件有多个空格作为某些列之间的分隔符,所以上述方法不起作用。是否有任何方法可以有效地在此文件中使用。
答案 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()
。