计算r data.table中每个组的剪切操作

时间:2017-03-06 07:05:54

标签: r data.table

我有两个数据表:

DT:

  a |  segment
 10 | 1
 20 | 1
 30 | 1
 40 | 1
 50 | 1
 60 | 1
 70 | 1
 80 | 1
 90 | 1
100 | 1
 10 | 2
 20 | 2
 30 | 2
 40 | 2
 50 | 2
 60 | 2
 70 | 2
 80 | 2
 90 | 2
100 | 2

DTBins:

 bin| segmentVal
 25 | 1
 50 | 1
 75 | 1
 20 | 2
 40 | 2
 60 | 2
 80 | 2

我想将cut函数应用于DT的列'a',按列'segment'分组,以便得到的输出为:

将(25,50,75)切割应用于DT列a中的所有值,使用段1 ,并使用(20,40,60,80)切割为a中的值,< strong> with segment 2 。

到目前为止,我写道:

DT[, bins := cut(a, breaks = DTBins[segmentVal == segment, bin]), by = seg]

但是,这会将切割应用于只有segment = 2的所有行。 任何想法。

1 个答案:

答案 0 :(得分:1)

我们可以尝试

 DT[, bins := unlist(Map(function(x,y) 
      cut(x$a, breaks = y), split(DT, DT$segment), split(DTBins$bin, DTBins$segmentVal)))]