当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R readr read_fwf 将固定宽度文件读入 tibble


固定宽度文件可以是数字数据的非常紧凑的表示。解析速度也非常快,因为每行中的每个字段都位于相同的位置。不幸的是,解析起来很痛苦,因为您需要说明每个字段的长度。 Readr 旨在通过提供多种不同的方式来说明字段结构,使其尽可能简单。

  • fwf_empty() - 根据空列的位置进行猜测。

  • fwf_widths() - 提供列的宽度。

  • fwf_positions() - 提供起始位置和结束位置的成对向量。

  • fwf_cols() - 提供成对的开始和结束位置或列宽的命名参数。

用法

read_fwf(
  file,
  col_positions = fwf_empty(file, skip, n = guess_max),
  col_types = NULL,
  col_select = NULL,
  id = NULL,
  locale = default_locale(),
  na = c("", "NA"),
  comment = "",
  trim_ws = TRUE,
  skip = 0,
  n_max = Inf,
  guess_max = min(n_max, 1000),
  progress = show_progress(),
  name_repair = "unique",
  num_threads = readr_threads(),
  show_col_types = should_show_types(),
  lazy = should_read_lazy(),
  skip_empty_rows = TRUE
)

fwf_empty(
  file,
  skip = 0,
  skip_empty_rows = FALSE,
  col_names = NULL,
  comment = "",
  n = 100L
)

fwf_widths(widths, col_names = NULL)

fwf_positions(start, end = NULL, col_names = NULL)

fwf_cols(...)

参数

file

文件路径、连接或文字数据(单个字符串或原始向量)。

.gz.bz2.xz.zip 结尾的文件将自动解压缩。将自动下载以 http://https://ftp://ftps:// 开头的文件。远程gz文件也可以自动下载并解压。

文字数据对于示例和测试最有用。要被识别为文字数据,输入必须用 I() 包装,是包含至少一个换行符的字符串,或者是至少包含一个带有换行符的字符串的向量。

使用值 clipboard() 将从系统剪贴板读取。

col_positions

列位置,由 fwf_empty()fwf_widths()fwf_positions() 创建。要仅读入选定的字段,请使用 fwf_positions() 。如果最后一列的宽度是可变的(参差不齐的 fwf 文件),则将最后一个结束位置提供为 NA。

col_types

NULLcols() 规范或字符串之一。有关更多详细信息,请参阅vignette("readr")

如果是 NULL ,则所有列类型都将从输入的 guess_max 行推断出来,散布在整个文件中。这很方便(而且快速),但不够稳健。如果猜测的类型错误,您需要增加 guess_max 或自己提供正确的类型。

list()cols() 创建的列规范必须为每一列包含一个列规范。如果您只想读取列的子集,请使用 cols_only()

或者,您可以使用紧凑的字符串表示形式,其中每个字符代表一列:

  • c = 字符

  • 我 = 整数

  • n = 数字

  • d = 双

  • l = 逻辑

  • f = 因子

  • D = 日期

  • T = 日期时间

  • t = 时间

  • ? = 猜猜

  • _ 或 - = 跳过

默认情况下,读取没有列规范的文件将打印一条消息,显示 readr 猜测的内容。要删除此消息,请设置 show_col_types = FALSE 或设置 `options(readr.show_col_types = FALSE)。

col_select

要包含在结果中的列。您可以使用与dplyr::select() 相同的mini-language 来按名称引用列。使用c() 可以使用多个选择表达式。尽管这种用法不太常见,col_select 也接受数字列索引。有关选择语言的完整详细信息,请参阅?tidyselect::language

id

用于存储文件路径的列的名称。当读取多个输入文件并且文件路径中有数据(例如数据收集日期)时,这非常有用。如果NULL(默认值)则不会创建额外的列。

locale

区域设置控制默认值因地而异。默认区域设置为 US-centric(如 R),但您可以使用 locale() 创建自己的区域设置来控制默认时区、编码、小数标记、大标记和日/月名称等内容。

na

要解释为缺失值的字符串的字符向量。将此选项设置为 character() 以指示没有缺失值。

comment

用于标识评论的字符串。注释字符之后的任何文本都将被默默忽略。

trim_ws

在解析每个字段之前是否应该删除前导和尾随空格(ASCII 空格和制表符)?

skip

读取数据之前要跳过的行数。

n_max

读取的最大行数。

guess_max

用于猜测列类型的最大行数。永远不会使用超过读取的行数。有关更多详细信息,请参阅vignette("column-types", package = "readr")

progress

显示进度条?默认情况下,它只会在交互式会话中显示,而不会在编织文档时显示。可以通过将选项 readr.show_progress 设置为 FALSE 来禁用自动进度条。

name_repair

列名的处理。默认行为是确保列名称为 "unique" 。支持多种修复策略:

  • "minimal":除了名称的基本存在之外,没有名称修复或检查。

  • "unique"(默认值):确保名称唯一且不为空。

  • "check_unique" :没有名称修复,但检查它们是 unique

  • "universal" :将名称命名为 unique 并进行语法设置。

  • 函数:应用自定义名称修复(例如,name_repair = make.names 用于基本 R 样式的名称)。

  • purrr-style 匿名函数,请参阅rlang::as_function()

此参数作为 repair 传递到 vctrs::vec_as_names() 。有关这些条款以及用于执行这些条款的策略的更多详细信息,请参阅此处。

num_threads

用于初始解析和延迟读取数据的处理线程数。如果您的数据在字段中包含换行符,解析器应自动检测到这一点并回退到仅使用一个线程。但是,如果您知道文件在带引号的字段中包含换行符,那么显式设置 num_threads = 1 是最安全的。

show_col_types

如果是 FALSE ,则不显示猜测的列类型。如果 TRUE 始终显示列类型,即使提供了列类型。如果 NULL(默认)仅在 col_types 参数未显式提供列类型时显示列类型。

lazy

懒惰地读取值?默认情况下,这是 FALSE ,因为延迟读取文件时有一些特殊的考虑因子,这导致了一些用户的错误。具体来说,读取然后写回同一个文件时,事情会变得很棘手。但是,一般来说,惰性读取 ( lazy = TRUE ) 有很多好处,特别是对于交互式使用以及当您的下游工作仅涉及行或列的子集时。

should_read_lazy()vroom::vroom()altrep 参数的文档中了解更多信息。

skip_empty_rows

空白行应该被完全忽略吗?即,如果此选项是TRUE,则根本不会表示空白行。如果是FALSE,则它们将由所有列中的NA 值表示。

col_names

可以是 NULL,也可以是字符向量列名称。

n

分词器将读取以确定文件结构的行数。默认情况下设置为 100。

widths

每个字段的宽度。读取参差不齐的 fwf 文件时,使用 NA 作为最后一个字段的宽度。

start, end

每个字段的开始和结束(包括)位置。读取参差不齐的 fwf 文件时,使用 NA 作为最后一个结束字段。

...

如果第一个元素是 DataFrame ,则它必须具有所有数字列以及一个或两个行。列名是变量名。如果长度为一向量,则列值是可变宽度;如果长度为二,则列值是可变开始和结束位置。 ... 的元素用于构造一个具有或两行的 DataFrame ,如上所述。

第二版改动

不再在文件中的任何位置查找注释。现在它们仅在行首被忽略。

也可以看看

read_table() 读取固定宽度的文件,其中每列由空格分隔。

例子

fwf_sample <- readr_example("fwf-sample.txt")
writeLines(read_lines(fwf_sample))
#> John Smith          WA        418-Y11-4111
#> Mary Hartford       CA        319-Z19-4341
#> Evan Nolan          IL        219-532-c301

# You can specify column positions in several ways:
# 1. Guess based on position of empty columns
read_fwf(fwf_sample, fwf_empty(fwf_sample, col_names = c("first", "last", "state", "ssn")))
#> Rows: 3 Columns: 4
#> ── Column specification ──────────────────────────────────────────────────
#> 
#> chr (4): first, last, state, ssn
#> 
#> ℹ Use `spec()` to retrieve the full column specification for this data.
#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#> # A tibble: 3 × 4
#>   first last     state ssn         
#>   <chr> <chr>    <chr> <chr>       
#> 1 John  Smith    WA    418-Y11-4111
#> 2 Mary  Hartford CA    319-Z19-4341
#> 3 Evan  Nolan    IL    219-532-c301
# 2. A vector of field widths
read_fwf(fwf_sample, fwf_widths(c(20, 10, 12), c("name", "state", "ssn")))
#> Rows: 3 Columns: 3
#> ── Column specification ──────────────────────────────────────────────────
#> 
#> chr (3): name, state, ssn
#> 
#> ℹ Use `spec()` to retrieve the full column specification for this data.
#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#> # A tibble: 3 × 3
#>   name          state ssn         
#>   <chr>         <chr> <chr>       
#> 1 John Smith    WA    418-Y11-4111
#> 2 Mary Hartford CA    319-Z19-4341
#> 3 Evan Nolan    IL    219-532-c301
# 3. Paired vectors of start and end positions
read_fwf(fwf_sample, fwf_positions(c(1, 30), c(20, 42), c("name", "ssn")))
#> Rows: 3 Columns: 2
#> ── Column specification ──────────────────────────────────────────────────
#> 
#> chr (2): name, ssn
#> 
#> ℹ Use `spec()` to retrieve the full column specification for this data.
#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#> # A tibble: 3 × 2
#>   name          ssn         
#>   <chr>         <chr>       
#> 1 John Smith    418-Y11-4111
#> 2 Mary Hartford 319-Z19-4341
#> 3 Evan Nolan    219-532-c301
# 4. Named arguments with start and end positions
read_fwf(fwf_sample, fwf_cols(name = c(1, 20), ssn = c(30, 42)))
#> Rows: 3 Columns: 2
#> ── Column specification ──────────────────────────────────────────────────
#> 
#> chr (2): name, ssn
#> 
#> ℹ Use `spec()` to retrieve the full column specification for this data.
#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#> # A tibble: 3 × 2
#>   name          ssn         
#>   <chr>         <chr>       
#> 1 John Smith    418-Y11-4111
#> 2 Mary Hartford 319-Z19-4341
#> 3 Evan Nolan    219-532-c301
# 5. Named arguments with column widths
read_fwf(fwf_sample, fwf_cols(name = 20, state = 10, ssn = 12))
#> Rows: 3 Columns: 3
#> ── Column specification ──────────────────────────────────────────────────
#> 
#> chr (3): name, state, ssn
#> 
#> ℹ Use `spec()` to retrieve the full column specification for this data.
#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#> # A tibble: 3 × 3
#>   name          state ssn         
#>   <chr>         <chr> <chr>       
#> 1 John Smith    WA    418-Y11-4111
#> 2 Mary Hartford CA    319-Z19-4341
#> 3 Evan Nolan    IL    219-532-c301
源代码:R/read_fwf.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Read a fixed width file into a tibble。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。