我有一个大数据集(大约100k行),其中2列引用了device_id和日期,其余列是属性(例如device_repaired,device_replaced)。
我正在构建ML算法来预测何时需要维护设备。为此,我想计算某些功能(例如device_reparations_on_last_3days,device_replacements_on_last_5days)。
我有一个子集我的数据集并返回计算的函数:
以下是上述数据和功能的示例:
data = data.frame(device_id=c(rep(1,5),rep(2,10))
,day=c(1:5,1:10)
,device_repaired=sample(0:1,15,replace=TRUE)
,device_replaced=sample(0:1,15,replace=TRUE))
# Exaxmple: How many times the device 1 was repaired over the last 2 days before day 3
# => getCalculation(3,1,data,"device_repaired",2)
getCalculation <- function(fday,fdeviceid,fdata,fattribute,fpreviousdays){
# Subset dataset
df = subset(fdata,day<fday & day>(fday-fpreviousdays-1) & device_id==fdeviceid)
# Make sure there's enough data; if so, make calculation
if(nrow(df)<fpreviousdays){
calculation = NA
} else {
calculation = sum(df[,fattribute])
}
return(calculation)
}
我的问题是可用属性的数量(例如device_repaired)和要计算的功能(例如device_reparations_on_last_3days)呈指数级增长,我的脚本需要大约4个小时才能执行,因为我需要遍历每一行并计算所有这些特征
我想使用一些 apply 方法来渲染这个逻辑,这也可以让我将其执行并行化,但我不知道它是否/如何使用可以将这些参数添加到lapply函数中。