2014-12-02 55 views
3

我有一个2500行的数据集,都是银行贷款。每笔银行贷款都有一笔未付金额和抵押品种。 (房地产,机床等)具有动态条件的子集数据R

我需要从这个数据集中抽取一个随机选择,例如未完成金额= 2.5百万+ -5%和最大25%的贷款与同一资产类别。

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

我创建了一个简单的数据集可能说明我的问题更多:如果我想例如5倍放出去的贷款数据集,其余额之和= 200.000(10%保证金)的

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")) 

,而不是允许超过40%是相同的抵押品种。 (所以在这个例子中最多为5分之2)

请让我知道是否需要额外的信息。 非常感谢, 添

回答

3

这个功能我做的工作:

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相同的抵押品。你可以随心所欲改变这些。

让我知道如果你没有得到它的任何部分。

+0

这正是我之后的感谢。我现在尝试自己调整它并将其用于更大的数据集。非常感谢,蒂姆 – 2014-12-02 13:22:01

+0

作品也完美的大数据集和更多的约束。完美 – 2014-12-02 19:50:29

+0

谢谢你的客气话。我真的很高兴我可以帮助:) – LyzandeR 2014-12-02 19:52:37