Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 带复位和延迟的总和_R - Fatal编程技术网

R 带复位和延迟的总和

R 带复位和延迟的总和,r,R,我正在寻找一种计算拖欠金额的方法。我已经找到了重置积算和的部分,但我一直在研究如何基于触发器“延迟”积算和;请参见我的示例,其中我希望的结果是正确的 df <- data.frame(id = c(1,1,1,1,2,2,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,8,8,8,8), min_due = c(25,50,50,75,25,50,25,50,25,25,25,50,75,100,25,5

我正在寻找一种计算拖欠金额的方法。我已经找到了重置积算和的部分,但我一直在研究如何基于触发器“延迟”积算和;请参见我的示例,其中我希望的结果是正确的

df <- data.frame(id = c(1,1,1,1,2,2,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,8,8,8,8),
             min_due = c(25,50,50,75,25,50,25,50,25,25,25,50,75,100,25,50,75,100,100,25,50,25,14.99,0,25,60,60,0,25,50,75,100,75,25,50,25,50),
             payment = c(0,0,25,0,0,0,0,0,50,25,0,0,0,0,0,0,0,0,25,100,0,150,25,14.99,0,25,60,60,0,0,0,0,50,0,0,25,0),
             past_due_amt = c(0,25,25,50,0,25,0,25,0,0,0,25,50,75,0,25,50,75,75,0,25,0,0,0,0,0,0,0,0,25,50,75,50,0,25,0,25),
             correct_bucket = c(0,1,1,2,0,1,0,1,0,0,0,1,2,3,0,1,2,3,3,0,1,0,0,0,0,0,0,0,0,1,2,3,2,0,1,0,1))
df
df$original_order=1:nrow(df)#以备以后需要。可选的
#获取每个id的增量最小到期日
df$b2=unlist(lapply(拆分(df,df$id),函数(a)c(0,差异(a$min_到期)))
#函数从增量最小到期日获取值
ff=功能(x){
x$b3=0
适用于(i/2:NROW(x)){
如果(x$b2[i]>0){
x$b3[i]=x$b3[i-1]+1
}
如果(x$b2[i]==0){
x$b3[i]=x$b3[i-1]
}
如果(x$b2[i]<0){
x$b3[i]=0
}
}
返回(x)
}
#按id拆分df,并在每个子组上使用上述函数
#“b3”是您想要的值
调用(rbind,lappy(split(df,df$id),函数(a)ff(a)))
新ff

ff = function(x){
    x$b3 = 0

    if(NROW(x) < 2){
        return(x)
    }

    for (i in 2:NROW(x)){
        if (x$b2[i] > 0){
            x$b3[i] = x$b3[i-1] + 1
        }
        if (x$b2[i] == 0){
            x$b3[i] = x$b3[i-1]
        }
        if (x$b2[i] < 0){
            x$b3[i] = 0
        }
    }
    return(x)
}
ff=函数(x){
x$b3=0
如果(NROW(x)<2){
返回(x)
}
适用于(i/2:NROW(x)){
如果(x$b2[i]>0){
x$b3[i]=x$b3[i-1]+1
}
如果(x$b2[i]==0){
x$b3[i]=x$b3[i-1]
}
如果(x$b2[i]<0){
x$b3[i]=0
}
}
返回(x)
}

对不起,我听不懂你的问题。删除了回答,抱歉浪费你的时间,没关系。也许有人能比我更了解你的问题,我认为你的答案非常聪明,而且非常接近。让我在原来的帖子里讨论这个问题,我能再由你来处理吗?这就是我的想法!(经过培训,我是SAS程序员)但我不知道如何在这里完成。然而,当我在我的实际数据集上运行它时,我得到了这个错误:if(x$b2[I]>0)中的错误{:缺少值,其中需要TRUE/FALSE。我在b2中没有任何NA,所以我有点困惑。有什么想法吗?它是数字的,我只是个白痴吗?摘要(df$b2)没有缺少值,我的表的其余部分也没有任何遗漏;表(is.NA)(df)).anyNA(df$b2)[1]False我想我可能已经找到了问题,但需要您的帮助来解决。因此我假设ff函数中的NROW(x)正在测量df right中的行数?NROW(df)结果在我的真实数据集中出现“NULL”。这可能是问题所在吗?它起作用了!但是,我在真实数据集中发现了一些不起作用的情况。我已在我的原始帖子中添加了这些场景。谢谢!
ff = function(x){
    x$b3 = 0

    if(NROW(x) < 2){
        return(x)
    }

    for (i in 2:NROW(x)){
        if (x$b2[i] > 0){
            x$b3[i] = x$b3[i-1] + 1
        }
        if (x$b2[i] == 0){
            x$b3[i] = x$b3[i-1]
        }
        if (x$b2[i] < 0){
            x$b3[i] = 0
        }
    }
    return(x)
}