代码之家  ›  专栏  ›  技术社区  ›  Panos Kalatzantonakis

从一个CSV保存和加载多个数据帧

  •  3
  • Panos Kalatzantonakis  · 技术社区  · 7 年前

    如何将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?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Panos Kalatzantonakis    7 年前

    这对我很有效:

    save(A_table, B_table, C_table, file="temp.Rdata") 
    load("temp.Rdata")
    
        2
  •  1
  •   G. Grothendieck    7 年前

    如评论中所述,如果您的目的只是稍后将其读回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