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

时间:2017-11-07 19:20:19

标签: r csv dataframe

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

E.g

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 个答案:

答案 0 :(得分:3)

这对我有用:

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

答案 1 :(得分:1)

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

另一个简单的解决方案是dump / source:

A <- B <- C <- BOD # test input
dump(c("A", "B", "C"))

# read back
source("dumpdata.R")

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

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

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

之间存在一些相似之处