使用动态日期

时间:2017-10-26 04:58:41

标签: r parallel-processing apply lapply

我有一个大数据集(大约100k行),其中2列引用了device_id和日期,其余列是属性(例如device_repaired,device_replaced)。

我正在构建ML算法来预测何时需要维护设备。为此,我想计算某些功能(例如device_reparations_on_last_3days,device_replacements_on_last_5days)。

我有一个子集我的数据集并返回计算的函数:

  • 对于指定的设备,
  • 那是在有问题的日子之前发生的,
  • 只要有足够的数据(例如,如果我想要过去3天,但只有2条记录存在,则返回NA)。

以下是上述数据和功能的示例:

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函数中。

0 个答案:

没有答案