【问题标题】:blank.lines.skip = TRUE fails with read.fwf?blank.lines.skip = TRUE 因 read.fwf 而失败?
【发布时间】:2012-07-23 02:54:23
【问题描述】:

我的文件末尾有四个空行。

> data=read.fwf("test2",head=F,widths=c(3,1,-3,4,-1,4),blank.lines.skip = TRUE)  
> data  

当我运行这段代码时,blank.lines.skip 参数被忽略。我的输出中仍然有空行。

文件是:

x1     F          1890 1962  
x2                1857 1936  
x3                1900 1978  
x4                1902 1994  
x5        F       1878 1939 

最后有四个空行。

【问题讨论】:

  • 另外,请注意,您提出这个特定问题的方式可能会让我们这些愿意提供帮助的人感到非常沮丧。我们没有您要阅读的文件,因此我们提供的任何帮助都只是猜测。这就是为什么我们强烈建议您提出问题reproducible
  • 感谢您尝试澄清您的问题。但是,任何问题都可能与您的特定文件的存储方式有关,当您简单地将内容复制并粘贴到您的问题中时,这种方式就会丢失。我们将需要文件本身。一个保管箱链接,也许?我们需要能够准确地复制您正在做的事情。
  • 你介意看我下面的回答吗?
  • 我知道我可以删除空白行,但我想在 R 中学习一些东西。

标签: r blank-line read.fwf


【解决方案1】:

看来blank.lines.skip 不适用于read.fwf 是对的——必须深入研究代码才能找出原因,但read.fwf 在传递文件之前会对文件进行重要处理(沿使用blank.lines.skip 指令)到read.table。但是,事后检测和删除全空行并不难。

例如:

cat("abc","def","ghi","","","",sep="\n",file="test3.dat")
read.table("test3.dat")  ## blank lines skipped (by default)
(x <- read.fwf("test3.dat",widths=c(1,1,1),blank.lines.skip=TRUE))
##     V1   V2   V3
## 1    a    b    c
## 2    d    e    f
## 3    g    h    i
## 4 <NA> <NA> <NA>
## 5 <NA> <NA> <NA>
## 6 <NA> <NA> <NA>
all_NA <- apply(x,1,function(z) all(is.na(z)))
x[!all_NA,]

回答您的其他问题(您作为答案发布,然后被版主删除;您通常应该通过编辑原始帖子或在必要时对问题发表评论来对您的问题进行必要的修改,而不是发布一个答案):colClasses 确实不够“聪明”,无法让您在大多数列上使用自动检测,而是为(a)特定列覆盖它。

【讨论】:

  • 可以直接替换read.fwf( textConnection("abc def ghi\n....\n"), ...)
猜你喜欢
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 2012-10-03
  • 2014-07-16
  • 2021-11-23
相关资源
最近更新 更多