【问题标题】:how to remove empty line with fread() in r如何在 r 中使用 fread() 删除空行
【发布时间】:2016-06-25 12:56:11
【问题描述】:

我需要一些指导如何正确地从文件中读取数据 - 没有放置在第一行(在标题之后)的空行。

脚本如下:

library(iotools)
library(data.table)    

#set a row qty for the dataframe
df_size<-100
#make a dataframe
n<-   data.frame(x=1:df_size,y=rnorm(1:df_size),z=rnorm(1:df_size),w=c("fgdfgd"))
n[,4]<-as.character(n[,4])
str(n)
#filename variable
file_output<-"test.csv"

#write to csv file
**fwrite_score(n,file_output)**


#read from the file saved
# option1
output<-fread(file_output, sep=";",dec=".",data.table = FALSE
              ,stringsAsFactors = FALSE)
str(output)
#option 2
output<-(fread(file_output, sep=";",,dec=".",data.table = FALSE
                ,stringsAsFactors = FALSE,header=TRUE,))[-1,]
str(output)

#**function to write a file fast** (function is written base upon 'write.csv.raw' from 'iotools' package):
fwrite_score<-function(  df=NA
                         ,file_name=NA
                       ){

#to remove previous file
  if (file.exists(file_name)) file.remove(file_name)
  #create new file
  file(file_name, ifelse(FALSE, "ab", "wb"))
  #create connection to the new file
  zz <- file(file_name, "wb")
  #convert dataframe into binary vector
  rnames<-as.output(rbind(colnames(df),""),sep=";",nsep="\t")
  #prepare binary vector to write
  r = as.output(df, sep = ";",nsep="\t")
  #add column names to the file
  writeBin(rnames, zz)
  #add dataframe body to the file
  writeBin(r, zz)
  #close file conection
  close(zz)
  rm(zz)
  gc()
}

option1 是常见的 'fread' - 空白行仍然存在。

option2使用外部参数排除空行'[-1,]'。

所以问题是是否有fread的内部参数来排除空行

该问题的替代解决方案是:

output<-read.csv.raw(file_output,header=TRUE,sep=";",skip=1)
str(output)

但我对 fread 选项很感兴趣,因为我在整个业务周期都在使用它。

【问题讨论】:

    标签: r csv data.table


    【解决方案1】:

    论点blank.lines.skip=TRUE 是你的答案。

    【讨论】:

      【解决方案2】:

      fread 也有一个skip 参数可以使用,但它与read.csv.raw 略有不同。所以你可能可以先阅读标题,然后使用skip阅读内容

      【讨论】:

      • @warmoverflow。感谢您的迅速答复。好吧,我考虑过这种方法,但在我看来 option2 由于其简洁性而更可取。那么你还有其他选择可以让它“fread”吗?
      • 我阅读了fread 文档,似乎没有其他选择。我之所以推荐这个只是因为fread 可能比read.csv.raw 快。
      • @warmoverflow 好吧,我听说'fread' 是最快的,但我的测试不同——'read.csv.raw' 的速度是'fread' 的 2 倍左右。我使用了相同的数据框,但将行数增加到 10 mio。但到目前为止,“read.csv.raw”的关键缺点是与“.”的刚性链接。作为十进制符号(至少对我而言)和更少的参数需要调整。 “fread”更加灵活。
      • 很高兴知道这一点。下次我会考虑read.csv.raw :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      • 2021-08-02
      • 2019-08-29
      • 2016-08-17
      • 2022-01-20
      相关资源
      最近更新 更多