【问题标题】:How to break one column to multiple rows with each cell row limit如何使用每个单元格行限制将一列分成多行
【发布时间】:2018-11-09 20:46:04
【问题描述】:

感谢您的宝贵时间。

我无法找到执行以下操作的方法。 该操作的逻辑是将一列分解为多行,并对每个单元格值进行限制。 第一行和第二行最大为 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

【问题讨论】:

    标签: r


    【解决方案1】:

    以下是使用循环的方法。如果您的数据不是太大,也不会太糟糕。

    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 的倍数的奖励行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 2021-11-04
      • 1970-01-01
      相关资源
      最近更新 更多