【问题标题】:duplicate low frequency values in a factor在一个因子中重复低频值
【发布时间】:2017-04-29 09:31:56
【问题描述】:

我需要复制那些在我的因子变量 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。

【问题讨论】:

  • rep(levels(group), each = n) 不起作用吗?其中 'n' 是 500 或根据 table 输出 rep(levels(group), table(group) + n-table(group))
  • 有效!非常感谢@akrun

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


【解决方案1】:

我们可以在“组”的levels 上使用rep 来获取所需的“n”

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)))))

数据

set.seed(24)
group <- factor(sample(letters[1:6], 3000, replace = TRUE))
n <- 500

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-22
    • 2013-07-21
    • 2019-12-14
    • 2011-12-13
    • 1970-01-01
    • 2020-05-05
    • 2017-12-12
    • 1970-01-01
    相关资源
    最近更新 更多