2017-03-06 49 views
1

我有两个数据表为:计算剪切操作上的每个组中的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”,并按列“分段”进行分组,结果输出如下:

申请切断与(25,50,75),所有值在列中的DT,与段1和切割(20,40,60,80)的值在一个,与段2

到目前为止,我写道:

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

但是,这适用于切割所有行只有部分= 2 任何想法。

回答

1

我们可以尝试

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

谢谢@akrun工作就像一个魅力。 –