如何在每个单元格行限制的情况下将一列拆分为多行

时间:2018-11-09 20:46:05

标签: r

谢谢您的时间。

我无法找到执行以下操作的方法。 该操作的逻辑是将一列分为多个行,每个单元格值都有限制。 第一行和第二行的最大值为250。随后的最大值为500。根据这些规则集,每个金额值都应细分为多行。 例如:-ID 1的金额为1500。当被分解时。第一行和第二行最多可允许250个值。然后下一行容纳其余部分,直到金额达到最大值。 数据如下所示

原始数据

ID  Name  Amount
1 aa  1500
2 bb  2000
3 cc  1000
4 dd  500

最终输出

ID  Name  Amount
1 aa  250
1 aa  250
1 aa  500
1 aa  500
2 bb  250
2 bb  250
2 bb  500
2 bb  500
2 bb  500
2 bb  500
3 cc  250
3 cc  250
3 cc  500
4 dd  250
4 dd  250

1 个答案:

答案 0 :(得分:0)

在这里,您可以通过循环来做到这一点。如果您的数据不太大,也不会太糟。

x = data.frame("ID"=1:5, "Name"=c("aa","bb","cc","dd","ee"),"Amount"=c(1500,2000,1000,500,800))

do_that = function(x){
    y = x[0,]
    r = 0
    for (i in 1:NROW(x)){
        count = 0
        while (x[i,3] > 0){
            r = r + 1
            y[r,1] = x[i,1]
            y[r,2] = x[i,2]
            y[r,3] = 0
            count = count + 1
            if (count <= 2){
                d = min(x[i,3], 250)
            } else {
                d = min(x[i,3], 500)
                }
            y[r,3] = y[r,3] + d
            x[i,3] = x[i,3] - d
            }
        }
    return (y)
    }

y = do_that(x)
y

我什至添加了奖金行,该行不是250或500的倍数。