在一个因子中复制低频值

时间:2017-04-29 09:31:56

标签: r duplicates data.table dplyr balanced-groups

我需要复制那些在我的因子变量groups中的频率小于500的级别。

> head(groups)
[1] 0000000 1000000 1000000 1000000 0000000 0000000
75 Levels: 0000000 0000001 0000010 0000100 0000110 0001000 0001010 0001100 0001110 0010000 0010010 0010100 0010110 ... 1111110

例如:

> table(group)
group
0000000 0000001 0000010 0000100 0000110 0001000 0001010 0001100 0001110 0010000 0010010 0010100 0010110 0011000 0011010 0011100 
  58674       6    1033     654     223    1232      31     222      17     818     132      32      15      42       9       9 
0011110 0100000 0100001 0100010 0100100 0100101 0100110 0101000 0101010 0101100 0101110 0110000 0110010 0110100 0110110 0111000 
      1   10609       1     487      64       1      58     132      11      12       3     142      27       9       7      11 
0111010 0111100 0111110 1000000 1000001 1000010 1000011 1000100 1000101 1000110 1001000 1001001 1001010 1001100 1001110 1010000 
      5       1       2   54245      10    1005       1     329       1     138     573       1      31      71      11     969 
1010010 1010100 1010110 1011000 1011010 1011100 1011110 1100000 1100001 1100010 1100011 1100100 1100110 1101000 1101010 1101011 
    147      29      21      63      15      10       4   14161       6     770       1     142      96     260      23       1 
1101100 1101110 1110000 1110001 1110010 1110100 1110110 1111000 1111010 1111100 1111110 
     34      16     439       2     103      13      26      36      13       8       5 

小组0000001000011000010100001100 ...必须最多复制500个。

理想情况是拥有groups的“样本平衡数据”,这些数据通常会低于500,并且会对其余级别(级别超过500次)进行惩罚,直到达到500.

1 个答案:

答案 0 :(得分:1)

我们可以在'{1}}'group'上使用rep作为所需的'n'

levels

如果我们还需要使用factor(rep(levels(group), each = n)) 结果

table

factor(rep(levels(group), table(group) + n-table(group)) )

pmax

数据

factor(rep(levels(group), pmax(n, table(levels(group)))))