【问题标题】:Save and Load multiple dataframes from one CSV从一个 CSV 保存和加载多个数据帧
【发布时间】:2018-04-20 07:45:55
【问题描述】:

如何将 3 个不同维度的数据帧保存到一个 csv 中,以便之后将它们加载到 3 个不同的数据帧中?

例如

write.table(A, file = "di2.csv", row.names = FALSE, col.names = FALSE, sep=',')
write.table(B, file = "di2.csv", row.names = FALSE, col.names = FALSE, sep=',', append=TRUE)
write.table(C, file = "di2.csv", row.names = FALSE, col.names = FALSE, sep=',', append=TRUE)

或者以更优雅的方式

write.csv(rbind(A, B, C), "di2.csv")

如何将此CSV 加载到 3 个数据帧 A、B 和 C?

【问题讨论】:

  • R 如何知道将哪些行放入哪个 data.frame?由于您编写了一个文件,因此最容易将其读入一个 data.frame 并根据需要对其进行拆分。否则,如果您真的需要,您可以使用 skip= 和 nrows= 的组合从文件中读取某些行(但不知何故,您必须提前知道需要在哪里进行拆分)。
  • 很容易猜到需要传递某种信息才能在之后加载它。如果以后我可以安全地加载它们,你能建议如何保存这些数据框吗?
  • 如果您不需要它是 CSV 格式,而您只需要稍后将其重新加载到 R 中,请使用 save()/load() 将多个 R 对象保存到一个文件中。
  • 是否可以将保存的 R 对象转换为 csv 文件?请提供一个示例@MrFlick 以接受您的回答:)
  • ?save/?load 帮助页面提供了示例。将 data.frame 加载回 R 后,您可以照常使用 write.csv。

标签: r csv dataframe


【解决方案1】:

这对我有用:

save(A_table, B_table, C_table, file="temp.Rdata") 
load("temp.Rdata")

【讨论】:

    【解决方案2】:

    如 cmets 中所述,如果您的目的只是稍后将它们读回 R,那么您可以使用保存/加载。

    另一个简单的解决方案是转储/来源:

    A <- B <- C <- BOD # test input
    dump(c("A", "B", "C"))
    
    # read back
    source("dumpdata.R")
    

    您可以考虑的其他多种对象格式是 hdf 和 SQLite 数据库(这是一个文件)。

    另一方面,如果重要的是它是可读的文本,Excel 可以直接读取并且至少有点类似于 csv 文件,那么将数据帧一个接一个地写出,每个之后都有一个空行。然后稍后再读回它们,读取文件并在空白行处分隔输入。 st 和 en 是 Lines 中块的起始行号和结束行号。

    A <- B <- C <- BOD # test inputs
    
    # write data frames to a single file
    con <- file("out.csv", "w")
    for(el in list(A, B, C)) {
       write.csv(el, con, row.names = FALSE)
       writeLines("", con)
    }
    close(con)
    
    # read data.frames from file into a list L
    Lines <- readLines("out.csv")
    en <- which(Lines == "")
    st <- c(1, head(en, -1))
    L <- Map(function(st, en) read.csv(text = Lines[st:en]), st, en)
    

    注意这个问题和Importing from CSV from a specified range of values有一些相似之处

    【讨论】:

      猜你喜欢
      • 2019-07-25
      • 2020-09-11
      • 1970-01-01
      • 2018-03-08
      • 2022-07-06
      • 2021-02-13
      • 2022-10-25
      • 1970-01-01
      • 2022-08-12
      相关资源
      最近更新 更多