r语言 - group_by来操纵几个唯一



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

d <- data_frame(ID = rep(sample(500),each = 20))

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

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

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

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

您可能需要:

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

基本上,每当 ID 更改时,ID - lag(ID, default = first(ID)) != 0的计算结果都会TRUE。对向量进行cumsum会给出ID列的 rleid(查看此答案以获取更多信息(,例如0 0 0 1 1 1 2 2 2。由于您希望每五个 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 具有不同的长度,这也应该有效。

最新更新