我正在尝试弄清楚如何在 R 中创建代码,以查找如何从不同组的数据集中删除重复项的所有组合,并创建所有数据集组合的列表。
测试数据示例:
groups <- c("A", "A", "A", "B", "B", "B", "C", "C", "C")
value <- c(1, 2, "duplicate1", "duplicate1", 4, "duplicate2", "duplicate2", 5, 6)
id <- 1:9
dat <- data.frame(
id = id,
groups = groups,
value = value
)
所需输出的示例:
list <- dataset1, dataset2, dataset3
一个组合的数据集 1 如何从组中删除重复项。但是,我也可以从 B 组中删除重复 1(将其保留在 A 组中)并从 C 组中删除重复 2(将其保留在 B 组中)。我寻找所有独特组合的数据集,这些组合如何将重复项保留在数据集中的一组中
团体 | 价值 |
---|---|
A | 1 |
A | 2 |
B | 重复1 |
B | 4 |
C | 重复2 |
C | 5 |
C | 6 |
如何找到 A、B 和 C 组中删除重复项 1 和重复项 2 的所有方法组合?我希望将所有数据集组合作为列表返回()
我尝试过 for (嵌套)循环、combn()、expand.grid() - 但我不够聪明,无法想到解决方案。 并尝试查看类似的解决方案,但我发现的解决方案不会从数据集中删除行和重复项。
提前非常感谢您的帮助。
这是一种选择。
这里明显的复杂性是重复项可能跨越
groups
。因此,在识别重复项时,只需忽略 groups
(和 id
)即可。
首先,
arrange
由value
。然后标记重复项。重新排序到原始顺序,过滤重复项并删除标记。
dat %>%
arrange(value) %>%
mutate(Duplicate = ifelse(row_number() == 1, FALSE, value == lag(value))) %>%
arrange(id) %>%
filter(!Duplicate) %>%
select(-Duplicate)
id groups value
1 1 A 1
2 2 A 2
3 3 A duplicate1
4 5 B 4
5 6 B duplicate2
6 8 C 5
7 9 C 6
这符合您的(替代)预期输出。