group_by操纵几个独特的

时间:2017-07-22 16:47:54

标签: r group-by dplyr data-manipulation

我通过以下方式创建数据:

d = d %>% mutate(new_col = rep(sample(100), each = 100))

我想为5个连续的唯一ID中的每一个创建一个新列。对于这个例子,似乎很容易,因为每个ID的长度是固定的。简单地说:

Validator   Illuminate\Validation\Factory   validator

获得连续的5个唯一ID。但是我生成了不固定的20个ID。我没有添加该部分,因为它需要其他长功能。

我的问题就是在我们拥有ID之后,我想连续5个连续的唯一ID,并为每个ID创建另一个列。我相信group_by可能会有所帮助,但我不确定如何使用它。

1 个答案:

答案 0 :(得分:3)

你可能需要这个:

d <- d %>% mutate(new_col = cumsum(ID - lag(ID, default = first(ID)) != 0) %/% 5)

基本上,只要有ID更改,ID - lag(ID, default = first(ID)) != 0就会评估为TRUE。在向量上执行cumsum会给ID0 0 0 1 1 1 2 2 2列提供一些内容(请查看this answer以获取更多信息)。由于您希望每个五个ID在新列中具有相同的ID,因此请通过 5 进行模块化划分。

table(d$new_col)

  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24 
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 
 25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49 
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 
 50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74 
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 
 75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 

如果ID的长度不同,这也应该有用。