我有以下输入:
C1 C2
1 1
1 1
1 2
1 3
1 4
2 1
. .
C1和C2是组,其中C2是C1中的嵌套组。现在我想在最小尺寸为2的C1上构建子组。虽然C2中的组不应该被拆分,但我希望拥有尽可能多的组。手动,我首先看一下C1组并将子组2,3和4连接到(G = 1)并将子组1(C2 = 1)作为一组(G = 2)。预期的输出是(其中G是我试图创建的组)
C1 C2 G
1 1 1
1 1 1
1 2 2
1 3 2
1 4 2
2 1 3
. . .
我希望它清楚我的意思。任何帮助都非常感谢。
答案 0 :(得分:2)
使用:
library(data.table)
setDT(mydf)[, G := {r <- rep(1:floor(.N/2), each = 2); if(length(r) != .N) c(r, tail(r,1)) else r}
, by = C1
][, G := rleid(G)][]
你得到:
C1 C2 G 1: 1 1 1 2: 1 1 1 3: 1 2 2 4: 1 3 2 5: 1 4 2 6: 2 1 3 7: 2 1 3 8: 2 2 4 9: 2 3 4 10: 2 4 4 11: 3 1 5 12: 3 2 5 13: 3 3 6 14: 3 4 6 15: 3 5 6
使用过的数据:
mydf <- structure(list(C1 = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L),
C2 = c(1L, 1L, 2L, 3L, 4L, 1L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L)),
.Names = c("C1", "C2"), class = "data.frame", row.names = c(NA, -15L))