保存和加载data.frames

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保存和加载data.frames相关的知识,希望对你有一定的参考价值。

我已经根据以下形式的一组twitters创建了一个数据帧:

 rdmTweets <- userTimeline("rdatamining", n=200)
 df <- do.call("rbind", lapply(rdmTweets, as.data.frame))

现在我用这种方式保存数据框:

 save(df, file="data")

如何加载保存的数据框以备将来使用?我用的时候:

  df2 <- load("data")

我应用dim(df2)它应该返回数据框有的推文数量,但它只显示1。

答案

正如@mrdwab指出的那样,save保存了名称以及数据/结构(实际上可以在一个文件中保存许多不同的R对象)。还有另一对存储功能可以按预期运行。试试这个:

saveRDS(df, file="mytweets.rds")
df2 <- readRDS("mytweets.rds")

这些函数一次只能处理一个对象。

另一答案

另一种选择是将数据框保存为csv文件。此选项的好处是它提供长期存储,即您(可能)可以在十年内在任何平台上打开您的csv文件。使用RData文件,你只能用R打开它,我不想打赌在版本之间打开它。

要将文件另存为csv,只需使用:read.csvwrite.csv,所以:

write.csv(df, file="out.csv", row.name=FALSE)
df = read.csv("out.csv", header=TRUE)

Gavin在下面的评论提出了几点:

CSV路由仅适用于表格式数据。

完全正确。但是,如果要保存数据框(如OP所示),那么您的数据将以表格形式显示。

使用R,您始终可以启动旧版本来读取数据并导出,如果由于某种原因他们更改了保存格式并且不允许旧格式由另一个函数加载。

要玩魔鬼的拥护者,你可以在Excel中使用这个参数并将你的数据保存为qazxsw poi。但是,以csv格式保存数据意味着我们永远不必担心这一点。

记录了R的文件格式,因此可以使用该开放信息轻松地读取另一个系统中的二进制数据。

我完全同意 - 虽然“轻松”有点强烈。这就是为什么保存为RData文件并不是什么大问题。但是,如果要保存表格数据,为什么不使用csv文件?

为了记录,将表格数据保存为RData文件有一些原因。例如,读/写文件或文件大小的速度。

另一答案

xls保存数据集的名称以及数据。因此,你不应该为save指定一个名字,你应该没事。换句话说,只需使用:

load("data")

它会将名为load("data") 的对象(或文件“data”中包含的任何内容)加载到当前工作空间中。

我建议为您的文件建议一个更原始的名称,并考虑添加一个扩展名,以帮助您记住脚本文件是什么,您的数据文件是什么,等等。


通过这个简单的例子来解决问题:

df

如您所见,rm(list = ls()) # Remove everything from your current workspace ls() # Anything there? Nope. # character(0) a <- 1:10 # Create an object "a" save(a, file="myData.Rdata") # Save object "a" ls() # Anything there? Yep. # [1] "a" rm(a) # Remove "a" from your workspace ls() # Anything there? Nope. # character(0) load("myData.Rdata") # Load your "myData.Rdata" file ls() # Anything there? Yep. Object "a". # [1] "a" str(a) # Is "a" what we expect it to be? Yep. # int [1:10] 1 2 3 4 5 6 7 8 9 10 a2 <- load("myData.Rdata") # What about your approach? ls() # Now we have 2 objects # [1] "a" "a2" str(a2) # "a2" stores the object names from your data file. # chr "a" 允许您一次保存和加载多个对象,这在处理具有多组数据的项目时非常方便。

另一方面,save(来自saveRDS)只允许您保存单个对象。在某些方面,这更加“透明”,因为the accepted answer没有先加载它。

以上是关于保存和加载data.frames的主要内容,如果未能解决你的问题,请参考以下文章

通过循环多个Data.frames /无法保存

使用 R 将列表的元素保存为 data.frames

如何将列附加到列表中的 data.frames,其中该列应包含计算读取的那些 data.frames 的结构信息?

比较两个data.frames以查找data.frame 1中不存在于data.frame 2中的行

合并大量data.frames [重复]

如何保存和加载 Android 活动的预设?