我想根据3列为每个不同的组创建唯一的顺序数字ID,但对于每个组,ID必须从1开始到n。R对数据中每个组的R唯一ID重新编号
使用Creating a unique ID的解决方案,我可以创建唯一的ID,但它们对于整个数据框是连续的。
k1 <- c(1,1,1,1,1,1,1,1,1,1)
k2 <- c(1,1,1,1,1,2,2,2,2,2)
k3 <- rep(letters[1:2],5)
df <- as.data.frame(cbind(k1,k2, k3))
d <- transform(df, id = as.numeric(interaction(k1,k2,k3, drop=TRUE)))
d <- d[with(d, order(k1,k2,k3)),]
结果是
> d k1 k2 k3 id 1 1 1 a 1 3 1 1 a 1 5 1 1 a 1 2 1 1 b 3 4 1 1 b 3 7 1 2 a 2 9 1 2 a 2 6 1 2 b 4 8 1 2 b 4 10 1 2 b 4
,我想有
> d k1 k2 k3 id 1 1 1 a 1 3 1 1 a 1 5 1 1 a 1 2 1 1 b 2 4 1 1 b 2 7 1 2 a 1 9 1 2 a 1 6 1 2 b 2 8 1 2 b 2 10 1 2 b 2
它的工作:)好。但它取决于以前的ID权利?如何在一次传球中拥有ID? – jcarlos 2015-04-04 14:49:54
@jcarlos我刚刚使用了您创建的以前的'id'。你可以直接在'interaction(..)'组中使用它 – akrun 2015-04-04 14:50:36
@jcarlos我认为data.table(ColonelBeauvel)的选项会更加直接,因为它有'.GRP' – akrun 2015-04-04 14:54:09