我通过以下方式创建数据:
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可能会有所帮助,但我不确定如何使用它。
答案 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
会给ID
列0 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的长度不同,这也应该有用。