dstrsplit takes raw or character vector and splits it into a dataframe according to the separators.

dstrsplit(x, col_types, sep="|", nsep=NA, strict=TRUE, skip=0L, nrows=-1L,
          quote="")

Arguments

x

character vector (each element is treated as a row) or a raw vector (newlines separate rows)

col_types

required character vector or a list. A vector of classes to be assumed for the output dataframe. If it is a list, class(x)[1] will be used to determine the class of the contained element. It will not be recycled, and must be at least as long as the longest row if strict is TRUE.

Possible values are "NULL" (when the column is skipped) one of the six atomic vector types ('character', 'numeric', 'logical', 'integer', 'complex', 'raw') or POSIXct. 'POSIXct' will parse date format in the form "YYYY-MM-DD hh:mm:ss.sss" assuming GMT time zone. The separators between digits can be any non-digit characters and only the date part is mandatory. See also fasttime::asPOSIXct for details.

sep

single character: field (column) separator. Set to NA for no seperator; in other words, a single column.

nsep

index name separator (single character) or NA if no index names are included

strict

logical, if FALSE then dstrsplit will not fail on parsing errors, otherwise input not matching the format (e.g. more columns than expected) will cause an error.

skip

integer: the number of lines of the data file to skip before beginning to read data.

nrows

integer: the maximum number of rows to read in. Negative and other invalid values are ignored.

quote

the set of quoting characters as a length 1 vector. To disable quoting altogether, use quote = "" (the default). Quoting is only considered for columns read as character.

Details

If nsep is specified then all characters up to (but excluding) the occurrence of nsep are treated as the index name. The remaining characters are split using the sep character into fields (columns). dstrsplit will fail with an error if any line contains more columns then expected unless strict is FALSE. Excessive columns are ignored in that case. Lines may contain fewer columns in which case they are set to NA.

Note that it is legal to use the same separator for sep and nsep in which case the first field is treated as a row name and subsequent fields as data columns.

If nsep is specified, the output of dstrsplit contains an extra column called 'rowindex' containing the row index. This is used instead of the rownames to allow for duplicated indicies (which are checked for and not allowed in a dataframe, unlike the case with a matrix).

Value

dstrsplit returns a data.frame with as many rows as they are lines in the input and as many columns as there are non-NULL values in col_types, plus an additional column if

nsep is specified. The colnames (other than the row index) are set to 'V' concatenated with the column number unless

col_types is a named vector in which case the names are inherited.

Author

Taylor Arnold and Simon Urbanek

Examples

input = c("apple\t2|2.7|horse|0d|1|2015-02-05 20:22:57",
          "pear\t7|3e3|bear|e4|1+3i|2015-02-05",
          "pear\te|1.8|bat|77|4.2i|2001-02-05")
z = dstrsplit(x = input,
      col_types = c("integer", "numeric", "character","raw","complex","POSIXct"),
      sep="|", nsep="\t")
lapply(z,class)
#> $rowindex
#> [1] "character"
#> 
#> $V1
#> [1] "integer"
#> 
#> $V2
#> [1] "numeric"
#> 
#> $V3
#> [1] "character"
#> 
#> $V4
#> [1] "raw"
#> 
#> $V5
#> [1] "complex"
#> 
#> $V6
#> [1] "POSIXct" "POSIXt" 
#> 
z
#>   rowindex V1     V2    V3 V4     V5                  V6
#> 1    apple  2    2.7 horse 0d 1+0.0i 2015-02-05 20:22:57
#> 2     pear  7 3000.0  bear e4 1+3.0i 2015-02-05 00:00:00
#> 3     pear NA    1.8   bat 77 0+4.2i 2001-02-05 00:00:00

# Ignoring the third column:
z = dstrsplit(x = input,
      col_types = c("integer", "numeric", "character","raw","complex","POSIXct"),
      sep="|", nsep="\t")
z
#>   rowindex V1     V2    V3 V4     V5                  V6
#> 1    apple  2    2.7 horse 0d 1+0.0i 2015-02-05 20:22:57
#> 2     pear  7 3000.0  bear e4 1+3.0i 2015-02-05 00:00:00
#> 3     pear NA    1.8   bat 77 0+4.2i 2001-02-05 00:00:00