我正在寻找一个dplyr或tidyr解决方案来将数据集拆分为n个块 . 但是,我不希望任何单个ID进入多个块 . 也就是说,每个ID应该只出现在一个块中 .
例如,想象下面的“测试”是一个ID变量,数据集有许多其他列 .
test<-data.frame(id= c(1,2,3,4,4,4,4,4,6,7,8,9,9,9,9,10),
val = 1:16)
out <- test %>% select(id) %>% ntile(n = 3)
out
[1] 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
ID = 4将以块1和2结束 . 我想知道如何对此进行编码,以便所有ID = 4最终都在同一个块中(无关紧要) . 我查看了split函数,但找不到这样做的方法 .
期望的输出就像是
test[which(out==1),]
回国
id val
1 1 1
2 2 2
3 3 3
4 4 4
5 4 5
6 4 6
7 4 7
8 4 8
然后如果我想查看第二个块,我会调用类似test [which(out == 2),]等等,直到out == n . 我只想一次处理一个块 . 我不需要同时创建所有n个块 .
1 回答
您需要创建一个数据框,然后使用
group_by
和mutate
添加列:或者给出Frank的评论你可以在id的不同/唯一值上运行
ntile
函数 - 然后将原始表加入id: