【发布时间】:2015-11-08 09:17:16
【问题描述】:
我有一个数据表和一个数据框列表,格式如下:
require(data.table)
members = c('a','b','c')
DT = do.call('rbind',
lapply(members, function(x){
date = seq(as.Date("2015/1/1"), as.Date("2015/12/31"), 'days')
dummy = sample(length(date))
dt = data.table(member=sample(x, length(dummy), replace=TRUE), date=date, dummy=dummy)}
)
)
date = seq(as.Date("2015/1/1"), as.Date("2015/12/31"), 'days')
l.members = lapply(members, function(x){
n.period = sample(10,1)
do.call('rbind',
lapply(1:n.period, function(y){
period = sample(date, 2)
if (period[1]>period[2]){
start=period[2]
due=period[1]
}else{
start=period[1]
due=period[2]
}
return(data.frame(start.date=start, due.date=due))}
)
)
})
names(l.members) = members
DT 是我想根据l.members 从中提取子集的大型(csv 文件大约 4G)数据表。 l.members 中条目 x 的每个名称都是 unique(DT$member) 中的成员之一。在每个条目中都有一个数据框,每一行代表一个周期 [p1, p2],基于此我想用 @987654327 对 DT 中的行进行子集化@ 是 x 和 DT$date => p1 和 DT$date p2。目前的解决方法如下:
l.member.periods = lapply(members,
function(x){
DT.member = DT[member==x]
apply(l.members[[x]], 1,
function(y){
start = y[1]
due = y[2]
return(DT.member[date>=start&date<=due])
}
)
}
)
l.members 中大约有 5000 个条目需要几十年的时间,每个条目大多有 10 行(句点)。我尝试用mclapply 替换lapply,但似乎没有用,最终导致内存变干并挂起。我怎样才能加快这个过程?
【问题讨论】:
标签: r data.table subset large-data