【问题标题】:Subset data with dynamic conditions in RR中具有动态条件的子集数据
【发布时间】:2015-01-30 09:56:01
【问题描述】:

我有一个包含 2500 行的数据集,它们都是银行贷款。每笔银行贷款都有未偿金额和抵押品类型。 (房地产,机床..等)

我需要从这个数据集中随机选择,例如,未偿还金额的总和 = 250 万 +-5% 和最多 25% 的相同资产类别的贷款。

我找到了函数 optim,但这需要一个函数,并且看起来是为了优化股票投资组合而构建的,这要复杂得多。我会说有一种简单的方法可以实现这一点?

我创建了一个样本数据集,可以更好地说明我的问题:

dataset <- data.frame(balance=c(25000,50000,35000,40000,65000,10000,5000,2000,2500,5000)
                      ,Collateral=c("Real estate","Aeroplanes","Machine tools","Auto Vehicles","Real estate",
                                    "Machine tools","Office equipment","Machine tools","Real estate","Auto Vehicles"))

例如,如果我想从该数据集中获得 5 笔贷款,其中未偿余额的总和 = 200.000(保证金为 10%)且不超过 40% 被允许是相同的抵押品类型。 (所以在这个例子中最多 5 个中的 2 个)

如果需要更多信息,请告诉我。 非常感谢, 蒂姆

【问题讨论】:

    标签: r optimization subset


    【解决方案1】:

    我制作的这个功能有效:

    pick_records <- function(df,size,bal,collat,max.it) {
      i <- 1
      j <- 1
      while ( i == 1 ) {
        s_index <- sample(1:nrow(df) , size)
        print(s_index)
        output <- df[s_index,]
        out_num <- lapply(output,as.numeric)
        tot.col <- sum(as.numeric(out_num$Collateral))
        if (sum(out_num$balance) < (bal*1.1) &
              sum(out_num$balance) > (bal*0.9) &
              all(  table(out_num$Collateral)/size  <= collat)   ) {
          return(output)
          break
        }
        print(j)
        j <- j + 1
        if ( j == max.it+1) {
          print('No solution found')
          break}     
      }
    } 
    
    > a <- pick_records(dataset,5,200000,0.4,20)
    > a
      balance       Collateral
    3   35000    Machine tools
    7    5000 Office equipment
    4   40000    Auto Vehicles
    5   65000      Real estate
    2   50000       Aeroplanes
    

    df 是您的数据框,size 是您想要的记录数,max.it 是在返回 no solution found 错误之前找到解决方案的最大迭代次数,bal 是平衡的限制和collat 抵押品相同。您可以随意更改。

    如果你没有得到它的任何部分,请告诉我。

    【讨论】:

    • 这正是我所追求的,非常感谢。我现在将尝试自己调整它并将其用于更大的数据集。非常感谢,蒂姆
    • 在大型数据集和更多约束条件下也能完美运行。完美
    • 感谢您的客气话。我真的很高兴能帮上忙 :)
    • 不客气:) 是否也可以使贷款数量动态化?我们现在正在寻找一定数量的贷款,但这不是我们本身所需要的。例如,我们要指明贷款数量必须在 50 到 100 之间。下一步是我们不指明贷款数量(行),而只指明余额的最小总和。例如,无论有多少贷款,我们都希望获得至少 2 亿美元的贷款。 (我们当然会使用抵押品/大小等限制)。
    • 您绝对可以使用上面示例中的方法来做到这一点。我无法在 cmets 此处发布答案,但您始终可以将其作为新问题发布,在这里进行了很好的解释,然后我稍后可能会提供帮助。如果我是你,虽然我会尝试使用上述方法来做到这一点。如果你自己尝试一下,你会学到很多东西,如果你有任何问题,我相信人们(包括我自己)会很乐意提供帮助 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    相关资源
    最近更新 更多