在R中存储和处理面板数据的有效方法

在R中存储和处理面板数据的有效方法,r,multidimensional-array,parallel-processing,R,Multidimensional Array,Parallel Processing,假设有1024个人的时间序列数据存储在单独的csv文件中。Ifread将它们放入内存,获得1024个数据帧,格式如下 表$Individual1 SampleDate,var1,var2,var3,... 2001-01-01,1001,2001,3001,... 2001-01-02,1002,2002,3002,... 2001-01-03,1004,2004,3004,... ... 2017-01-01,9999,9999,9999,... SampleDate,var1,var2,va

假设有1024个人的时间序列数据存储在单独的csv文件中。I
fread
将它们放入内存,获得1024个
数据帧,格式如下

表$Individual1
SampleDate,var1,var2,var3,...
2001-01-01,1001,2001,3001,...
2001-01-02,1002,2002,3002,...
2001-01-03,1004,2004,3004,...
...
2017-01-01,9999,9999,9999,...
SampleDate,var1,var2,var3,。。。
2001-01-01,1001,2001,3001,...
2001-01-02,1002,2002,3002,...
2001-01-03,1004,2004,3004,...
...
2017-01-01999999999,…

表$Individual2
SampleDate,var1,var2,var3,...
1992-03-01,1101,2101,3101,...
1992-03-02,1102,2102,3102,...
1992-03-03,1104,2104,3104,...
...
2017-01-01,8888,8888,8888,...
SampleDate,var1,var2,var3,。。。
1992-03-01,1101,2101,3101,...
1992-03-02,1102,2102,3102,...
1992-03-03,1104,2104,3104,...
...
2017-01-018888888888,…

这些表格有不同的初始观察日期,因为这些个体有不同的出生日期,但随后的每一天按顺序对应一行。如果我使用数组存储组合数据,那么许多元素(出生前几天)将为空。在内存中组织它们的最佳方式是什么,以允许快速访问横断面数据?例如,我想在2010-04-01获取当天存在的所有个体的
var1,var3
。目前,我必须使用一个函数来提取每个表的一部分,这个函数非常慢

另一件事。假设我需要在8个不同的日期通过函数
f(var1,var2,var3,…)
对这些个体进行排序。现在这是一个令人尴尬的并行任务,所以我很容易地抓到并行包,却发现集群导出这些表需要花费很长时间。有没有使用共享内存的clusterExport变体,或者我应该切换到linux来创建fork集群


任何帮助都将不胜感激。

为什么不添加一个带有individualsID的字段,并将所有数据放入一个数据帧中呢

以df1为样本1,df2为样本2,然后

df1$IndID <- "01"
与df2相同

df2$IndID <- "02"
然后,数据的处理很容易,也很省时-例如,您的问题-获取var1和var3

> df[df$SampleDate=="2017-01-01", c("var1","var3")]
  var1 var3
4 9999 9999
8 8888 8888
要对数据进行排序

> library(dplyr)
> arrange(df, IndID, var1, var2, var3)

为什么不添加一个带有individualsID的字段并将所有数据放在一个数据帧中呢

以df1为样本1,df2为样本2,然后

df1$IndID <- "01"
与df2相同

df2$IndID <- "02"
然后,数据的处理很容易,也很省时-例如,您的问题-获取var1和var3

> df[df$SampleDate=="2017-01-01", c("var1","var3")]
  var1 var3
4 9999 9999
8 8888 8888
要对数据进行排序

> library(dplyr)
> arrange(df, IndID, var1, var2, var3)
部分答覆:

lapply(Tables, '[[', 'var1')
如果返回一个包含每个Individual的var1列的列表,您可以将更多参数传递到第二部分,以仅提取所需的日期值。

部分答案:

lapply(Tables, '[[', 'var1')
如果为每个Individual返回一个包含var1列的列表,则可以向第二部分传递更多参数,以仅提取所需的日期值