如何按条件过滤数据,使每组的行数相同

时间:2017-11-30 10:50:16

标签: r filter group-by rows

这是我的样本数据:

date label  type exdate    x       y       z       w
 1    10     A     2      15      0.25    0.35   13.49
 1    10     A     2      12.5    1.30    1.45   13.49  
 1    10     B     2      10      1.7     1.8    13.49  
 1    10     B     2      12.5    0.3     0.4    13.49
 1    10     B     2      17.5    1.8     0.3    13.49
 1    11     A     3      15      0.75    0.8    13.49  
 1    11     A     3      12.5    1.8     1.9    13.49  
 1    11     A     3      17.5    0.2     0.35   13.49  
 1    11     B     3      10      0.1     0.25   13.49  
 1    11     B     3      15      2.15    2.3    13.49  
 1    11     B     3      12.5    0.8     0.85   13.49  
 1    11     B     3      17.5    4.1     4.3    13.49  
 2    11     A     4      10      3.7     4      13.49
 2    11     A     4      15      1       1.1    13.49   
 2    11     A     4      12.5    2.05    2.2    13.49  
 2    11     A     4      17.5    0.4     0.55   13.49  
 2    11     B     4      10      0.3     0.4    13.49  
 2    11     B     4      15      2.45    2.6    13.49  
 2    11     B     4      12.5    1.05    1.15   13.49  
 2    11     B     4      17.5    4.3     4.6    13.49   

首先,我将按c(日期,标签,exdate)对我的数据集进行分组,对于每个组,它将在变量'type'中为A和B. 但是我想让A类和B类的行数相同。

过滤条件:

  • 要使数据行数相同,对于任何A类和B类对,x和w之间的距离应相同或几乎相同。

例如:

 type   x     w 
  A     2    3.5
  A     3    3.5
  A     4    3.5
  B     1    3.5
  B     2    3.5

 # The output after filter
 type   x     w 
  A     2    3.5 (pair with type_B ; x = 1)
  A     3    3.5 (pair with type_B ; x = 2)
  B     1    3.5
  B     2    3.5

因此,对于上面的示例数据,我希望得到结果:

date label  type exdate    x       y       z       w
 1    10     A     2      15      0.25    0.35   13.49
 1    10     A     2      12.5    1.30    1.45   13.49      
 1    10     B     2      12.5    0.3     0.4    13.49
 1    10     B     2      17.5    1.8     0.3    13.49
 1    11     A     3      15      0.75    0.8    13.49  
 1    11     A     3      12.5    1.8     1.9    13.49  
 1    11     A     3      17.5    0.2     0.35   13.49      
 1    11     B     3      15      2.15    2.3    13.49  
 1    11     B     3      12.5    0.8     0.85   13.49  
 1    11     B     3      17.5    4.1     4.3    13.49  
 2    11     A     4      10      3.7     4      13.49
 2    11     A     4      15      1       1.1    13.49   
 2    11     A     4      12.5    2.05    2.2    13.49  
 2    11     A     4      17.5    0.4     0.55   13.49  
 2    11     B     4      10      0.3     0.4    13.49  
 2    11     B     4      15      2.45    2.6    13.49  
 2    11     B     4      12.5    1.05    1.15   13.49  
 2    11     B     4      17.5    4.3     4.6    13.49

要制作此结果,我该如何编码?如果条件在filter()?

中,它是否插入else

0 个答案:

没有答案