我有一个跨组重复的数据集。 例如:
dat <- data.frame(
group = c("A", "A", "A", "B", "B", "C","C","C"),
values = c("duplicate1","duplicate2",3,"duplicate1",
5,"duplicate1","duplicate2",6)
)
我的预期输出是一个包含 N 个数据集的列表,其中包含每个组如何保留重复项的独特组合:
dfs <- list(df1, df2, df3, df4, df5, df6)
dfs[[1]] ## Combination 1
group values
1 A duplicate1
2 A duplicate2
3 A 3
4 B 5
5 C 6
dfs[[2]] ## Combination 2
group values
1 A duplicate2
2 A 3
3 B 5
4 B duplicate1
5 C 6
dfs[[3]] ## Combination 3
group values
1 A duplicate2
2 A 3
3 B 5
4 C 6
5 C duplicate1
dfs[[4]] ## Combination 4
group values
1 A duplicate1
2 A 3
3 B 5
4 C 6
5 C duplicate2
dfs[[5]] ## Combination 5
group values
1 A 3
2 B 5
3 B duplicate1
4 C 6
5 C duplicate2
dfs[[6]] ## Combination 6
group values
1 A 3
2 B 5
3 C 6
4 C duplicate1
5 C duplicate2
我想我有一个解决方案: 查找从数据集中删除组中重复项的所有唯一组合
但是,如果重复项跨 > 2 个组,则此解决方案不起作用,如上例所示。它只会从数据帧中删除一个重复项,然后组合也会将重复项 1 保留在 B 组或 C 组中。
library(dplyr)
dat %>%
summarise(group = list(group), .by = values) %>%
{apply(expand.grid(.$group), 1, \(x)
data.frame(group = x, values = .$values, row.names = NULL) %>%
arrange(group))}
#> [[1]]
#> group values
#> 1 A duplicate1
#> 2 A duplicate2
#> 3 A 3
#> 4 B 5
#> 5 C 6
#>
#> [[2]]
#> group values
#> 1 A duplicate2
#> 2 A 3
#> 3 B duplicate1
#> 4 B 5
#> 5 C 6
#>
#> [[3]]
#> group values
#> 1 A duplicate2
#> 2 A 3
#> 3 B 5
#> 4 C duplicate1
#> 5 C 6
#>
#> [[4]]
#> group values
#> 1 A duplicate1
#> 2 A 3
#> 3 B 5
#> 4 C duplicate2
#> 5 C 6
#>
#> [[5]]
#> group values
#> 1 A 3
#> 2 B duplicate1
#> 3 B 5
#> 4 C duplicate2
#> 5 C 6
#>
#> [[6]]
#> group values
#> 1 A 3
#> 2 B 5
#> 3 C duplicate1
#> 4 C duplicate2
#> 5 C 6
创建于 2024-04-22,使用 reprex v2.0.2