【发布时间】:2017-04-06 14:38:05
【问题描述】:
我想在连续组之间setdiff 不使用 for 循环,如果可能的话,使用数据表方式或应用族功能。
数据框 df :
id group
1 L1 1
2 L2 1
3 L1 2
4 L3 2
5 L4 2
6 L3 3
7 L5 3
8 L6 3
9 L1 4
10 L4 4
11 L2 5
我想知道连续组之间有多少新 ID。因此,例如,如果我们比较第 1 组和第 2 组,有两个新的 id:L3 和 L4,所以如果我们比较第 2 组和3,L5 和 L6 是新闻 id,所以它返回 2,依此类推。
预期结果:
new_id
2
2
2
1
数据:
structure(list(id = structure(c(1L, 2L, 1L, 3L, 4L, 3L, 5L, 6L,
1L, 4L, 2L), .Label = c("L1", "L2", "L3", "L4", "L5", "L6"), class = "factor"),
group = c(1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5)), class = "data.frame", row.names = c(NA,
-11L), .Names = c("id", "group"))
【问题讨论】:
-
你也可以基于this post 构建一些东西——例如
tab = table(df) > 0; (colSums(tab) - crossprod(tab))[cbind(2:5, 1:4)](并相应调整子集中的硬编码)