繁体   English   中英

使用FF包在R中创建和重塑大数据的函数

[英]Functions for creating and reshaping big data in R using the FF package

我是R和FF包的新手,并试图更好地了解FF如何使用户使用大型数据集(> 4Gb)。 我花了很多时间在网上浏览教程,但我通常能找到的这些问题使我望而却步。

通过练习,我学得最好,因此,作为一个练习,我想知道如何使用任意值创建长格式的时间序列数据集,类似于R的内置“ Indometh”数据集。 然后,我想将其重塑为宽幅格式。 然后,我想将输出另存为csv文件。

对于小型数据集,这很简单,可以使用以下脚本来实现:

##########################################
#Generate the data frame

DF<-data.frame()
for(Subject in 1:6){
  for(time in 1:11){
    DF<-rbind(DF,c(Subject,time,runif(1)))
  }
}
names(DF)<-c("Subject","time","conc")

##########################################
#Reshape to wide format

DF<-reshape(DF, v.names = "conc", idvar = "Subject", timevar = "time", direction = "wide")

##########################################
#Save csv file

write.csv(DF,file="DF.csv")

但是我想学习如何对大约10 Gb的文件大小执行此操作。 我将如何使用FF软件包来做到这一点? 提前致谢。

该功能reshape没有明确存在ffdf对象。 但是使用ffbase软件包的功能执行起来非常简单。 只需使用ffbase包中的ffbase ,按Subject拆分,然后在函数内部应用reshape

具有1000000个主题的Indometh数据集上的示例。

require(ffbase)
require(datasets)
data(Indometh)

## Generate some random data
x <- expand.ffgrid(Subject = ff(factor(1:1000000)), time = ff(unique(Indometh$time)))
x$conc <- ffrandom(n=nrow(x), rfun = rnorm)
dim(x)
[1] 11000000        3

## and reshape to wide format
result <- ffdfdply(x=x, split=x$Subject, FUN=function(datawithseveralsplitelements){
  df <- reshape(datawithseveralsplitelements, 
              v.names = "conc", idvar = "Subject", timevar = "time", direction = "wide")
  as.data.frame(df)
})
class(result)
[1] "ffdf"
colnames(result)
[1] "Subject"   "conc.0.25" "conc.0.5"  "conc.0.75" "conc.1"    "conc.1.25" "conc.2"    "conc.3"    "conc.4"    "conc.5"    "conc.6"    "conc.8"   
dim(result)
[1] 1000000      12

您将很难构建一种比您提供的方法效率更低的方法。 使用rbind.data.frame效率极低。 尝试使用此方法为6个主题创建一个六千行的数据集:

DF <- data.frame( Subj = rep( 1:6, each=1000), matrix(runif(6000*11), nrow=6000) )

将其扩展到具有十亿个项目(十亿美元,而不是十亿美元)应该可以为您提供约10GB的对象,那么也许可以尝试8000万行左右?

我认为在ff-package中寻求教程是SO的范围之外。 请阅读常见问题解答。 此类问题通常是封闭的,因为发问者表明他们并不真正知道自己在说什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM