【问题标题】:How to export/read an empty dataframe in R?如何在 R 中导出/读取空数据框?
【发布时间】:2018-11-14 21:29:10
【问题描述】:

我正在尝试使用read.csvwrite.csv 将数据帧导出/导入为csv 文件,但是当data.frame 为空时,我似乎无法处理这种情况。通常,如果我的data.frame 为空(即它有列但没有行名)write.csv 创建一个空的 *.csv 文件,当我尝试使用read.csv 读取它时出现错误。有什么解决办法吗?

编辑:

我得到的错误信息是:

我收到以下错误消息:

Error in read.table(file = file, header = header, sep = sep, quote = 
quote,  : 
les premières cinq lignes sont vides : abandon

这意味着:前 5 行是空的:放弃。

我的代码行是:

write.csv(DF.old,file="DF_old.csv",row.names=FALSE)
DF.old<-read.csv(file="DF_old.csv")

dataframe中数据的类型是:

当我使用以下命令时,它可能会变空:

DF.old <- DF.old[DF.old$exceptionnel==T]
DF.old<-DF.old  %>% 
      filter(!id_op %in% to_add$id_op)

最后,这是在一个闪亮的应用程序中。

【问题讨论】:

  • 真的是错误还是警告?请发布发生的消息。
  • 你为什么要写一个空的数据框?
  • 我无法重现此内容。投票结束作为题外话。

标签: r csv shiny read.csv


【解决方案1】:

这至少适用于data.table

> library(data.table)
> 
> #generate a data table with column name and no rows
> DT <- data.table(column1="value")[column1!="value"]
> 
> #print the data table
> DT
Empty data.table (0 rows) of 1 col: column1
> 
> #write the data table
> fwrite(DT, "test.csv")
> 
> #read the data table
> fread("test.csv")
Empty data.table (0 rows) of 1 col: column1

因此,当使用fwrite 写入并使用fread 回读时,不会出现错误,并且会保留列名。

【讨论】:

    【解决方案2】:
    dat <- data.frame(A=character(),B=numeric())
    write.csv(dat, 'test.csv', row.names=FALSE)
    dat2 <- read.csv('test.csv')
    head(dat)
    head(dat2)
    
    # For Vincent
    require(dplyr)
    DF <- data.frame(a=c('A','B','C','A','A','B'),b=rnorm(6))  
    DF.old <- DF %>% filter (a %in% 'D')
    write.csv(DF.old,file="DF_old.csv",row.names=FALSE)
    DF.old2<-read.csv(file="DF_old.csv")
    

    我尝试了这个,但没有收到任何错误和警告。请检查您的脚本并发布您的错误消息。

    【讨论】:

    • 您能发布生成 DF.old 的脚本吗?或者给出更多的信息,比如类类型、维度等。
    • 我已经更新了我的代码。我只是无法重现您的问题。您是否尝试过rm(list=ls())、重新启动 R 会话或其他方式?您是否尝试运行我和“anotherfred”发布的代码并找到任何东西?
    • 您的两个代码都可以正常工作...也许不同之处在于我的代码是 Shiny 应用程序的一部分?
    【解决方案3】:

    在处理 0 列 0 行的空数据框时,data.table 中的fwrite 失败。但是,来自 readrwrite_csv 成功创建了一个空的 csv 文件。

    library(readr) # or library(tidyverse)
    df <- data.frame()
    write_csv(df, "~/empty_df.csv")
    # fwrite does not work
    

    【讨论】:

      猜你喜欢
      • 2019-04-13
      • 2020-04-22
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 2019-06-15
      • 2015-03-22
      相关资源
      最近更新 更多