約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)
読み込む必要があるファイルには、いくつかの列の間の区切り文字として複数のスペースがあるため、上記の方法は機能しません。このファイルを効率的に読み取ることができる方法はありますか?.
区切り文字を変更する必要があります。 " "
は、1つの空白文字を指します。 ""
は、任意の長さの空白を区切り文字として参照します
data <- read.table(file, sep = "" , header = F , nrows = 100,
na.strings ="", stringsAsFactors= F)
マニュアルから:
Sep = ""(read.tableのデフォルト)の場合、区切り文字は「空白」、つまり1つ以上のスペース、タブ、改行、またはキャリッジリターンです。
また、大きなデータファイルでは、data.table:::fread
すぐにデータを直接data.tableに読み込みます。私は今朝この機能を使用していました。それはまだ実験的ですが、私はそれが実際に非常にうまくいくと思います。
代わりに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.
フィールドの幅が固定されている場合は、欠損値をより適切に処理できるread.fwf()
の使用を検討する必要があります。