我有两个数据表:
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的所有行。 任何想法。
答案 0 :(得分:1)
我们可以尝试
DT[, bins := unlist(Map(function(x,y)
cut(x$a, breaks = y), split(DT, DT$segment), split(DTBins$bin, DTBins$segmentVal)))]