导入固定宽度的文件

固定宽度文件是文本文件,其中列不由任何字符分隔符分隔,如 ,;,而是具有固定的字符长度( 宽度 )。数据通常用空格填充。

一个例子:

Column1 Column2   Column3           Column4Column5 
1647    pi        'important'       3.141596.28318
1731    euler     'quite important' 2.718285.43656
1979    answer    'The Answer.'     42     42

假设该数据表存在于工作目录中的本地文件 constants.txt 中。

使用基础 R 导入

df <- read.fwf('constants.txt', widths = c(8,10,18,7,8), header = FALSE, skip = 1)

df
#>     V1     V2                 V3         V4        V5
#> 1 1647     pi         'important'   3.14159   6.28318
#> 2 1731  euler   'quite important'   2.71828   5.43656
#> 3 1979 answer       'The Answer.'   42        42.0000

注意:

  • 列标题不需要用字符分隔(Column4Column5
  • widths 参数定义每列的宽度
  • read.fwf() 无法读取未分隔的标题

使用 readr 导入

library(readr)

df <- read_fwf('constants.txt', 
               fwf_cols(Year = 8, Name = 10, Importance = 18, Value = 7, Doubled = 8), 
               skip = 1)
df
#> # A tibble: 3 x 5
#>    Year    Name        Importance    Value  Doubled
#>    <int>   <chr>           <chr>     <dbl>    <dbl>
#> 1  1647      pi       'important'  3.14159  6.28318
#> 2  1731   euler 'quite important'  2.71828  5.43656
#> 3  1979  answer     'The Answer.' 42.00000 42.00000

注意:

  • readr 的 fwf_*辅助函数提供了指定列长度的替代方法,包括自动猜测(fwf_empty
  • readr 比 base R 快
  • 无法从数据文件中自动导入列标题