计算r数据表中每组的切割操作

计算r数据表中每组的切割操作,r,data.table,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 bin| segmentVal 25 | 1 50 | 1 75 | 1 20 | 2 40 | 2 60

我有两个数据表:

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
 bin| segmentVal
 25 | 1
 50 | 1
 75 | 1
 20 | 2
 40 | 2
 60 | 2
 80 | 2
dtbin:

  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
 bin| segmentVal
 25 | 1
 50 | 1
 75 | 1
 20 | 2
 40 | 2
 60 | 2
 80 | 2
我想将
cut
函数应用于DT的“a”列,按“段”列分组,结果输出如下:

使用(25、50、75)对DT的a列中的所有值进行切割,使用第1段,使用(20、40、60、80)对a列中的值进行切割,使用第2段

到目前为止,我写道:

DT[, bins := cut(a, breaks = DTBins[segmentVal == segment, bin]), by = seg]
但是,这会将“剪切”应用于只有线段=2的所有行。 任何想法。

我们可以试试

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

谢谢@akrun工作得很有魅力。