查找从数据集中删除组中重复项的所有唯一组合

问题描述 投票:0回答:1

我正在尝试弄清楚如何在 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() - 但我不够聪明,无法想到解决方案。 并尝试查看类似的解决方案,但我发现的解决方案不会从数据集中删除行和重复项。

提前非常感谢您的帮助。

r nested-loops
1个回答
0
投票

这是一种选择。

这里明显的复杂性是重复项可能跨越

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

这符合您的(替代)预期输出。

© www.soinside.com 2019 - 2024. All rights reserved.