计算r数据表中每组的切割操作
我有两个数据表: DT:计算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
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工作得很有魅力。