【问题标题】:R readr::read_fwf ignore characters using fwf_widthsR readr::read_fwf 使用 fwf_widths 忽略字符
【发布时间】:2016-08-15 21:00:09
【问题描述】:

我想知道是否有一种简单的方法可以使用 R 中 readr 包中的 read_fwf 跳过字符。

例如,修改文档中的示例之一

library(readr)
fwf_sample <- system.file("extdata/fwf-sample.txt", package = "readr")
read_fwf(fwf_sample, fwf_widths(c(2, -3,2, 3)))

抛出错误:

Error: Begin offset (2) must be smaller than end offset (-1)

使用基本的 read.fwf 函数可以正常工作:

read.fwf(fwf_sample, widths = c(2,-3,2,3))

#  V1 V2  V3
#1 12 67 890
#2 12 67 890
#3 12 67 890
#4 12 67 890
#5 12 67 890

有没有办法可以使用readr::read_fwf 模仿这种行为? (我主要是出于性能原因感兴趣)。

【问题讨论】:

  • 我的机器上没有错误。b 使用阅读器版本 1.0.0。在 R 3.3.1 中。另一方面,否定不被尊重,我得到 4 列。
  • 我在 Ubuntu 64 位上使用 R 3.3.1 和 readr 0.2.2。我升级到 1.0.0,现在我遇到了同样的问题。我想我会坚持阅读。 fwf 暂时...

标签: r fixed-width readr read.fwf


【解决方案1】:

帮助页面建议使用fwf_positions:

> read_fwf(fwf_sample, fwf_positions(c(1, 5, 8), c(2, 7, 10),  col_names=paste0("V", 1:3)) )
Parsed with column specification:
cols(
  V1 = col_character(),
  V2 = col_character(),
  V3 = col_character()
)
# A tibble: 3 x 3
     V1    V2    V3
  <chr> <chr> <chr>
1    Jo    Sm   ith
2    Ma    Ha   rtf
3    Ev    No   lan

【讨论】:

  • 谢谢,可能这是唯一的方法.. 虽然我不太喜欢这个解决方案,因为它非常冗长......
  • 你对计算机编程中的“冗长”有一个非常奇怪的概念。
  • 我更喜欢使用负数跳过列:) 而不是必须构建两个向量.. 我必须习惯于阅读.fwf.. 我觉得它非常直观:)
  • 如果您将 x 设置为直观的列规范,那么这些将是 read_fwf 中开始和停止向量的值:tail(cumsum(c(abs(x), length(x)))[x&gt;0], -1) .... [1] 7 10 14 head(cumsum(c(1, abs(x)))[x &gt; 0], -1) ... . [1] 1 6 8
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多