首页 > 解决方案 > 循环遍历数据框中的所有列组合

问题描述

如何遍历数据框中所有可能的列组合,然后按函数在组中使用这些变量组合?例如,如果我有一个包含 2 列 A 和 B 的数据框,我想运行一个循环,该循环首先按 A 分组,然后按 B 分组,最后按 AB?

PS:我尝试过combn功能,但我们只能选择固定数量的组合(2,3等)。但是,我需要所有可能的列组合,这基本上等于列数。对于 4 列,这将是:1、2、3 和 4 的所有组合。谢谢!

标签: r

解决方案


假设输入为s <- c("a","b","c","d"),则所有组合都可以通过以下方式获得:

Map(function(v) apply(v,2, function(x) paste0(x,collapse = "")),sapply(seq_along(s), function(k) combn(s,k)))

这使:

[[1]]
[1] "a" "b" "c" "d"

[[2]]
[1] "ab" "ac" "ad" "bc" "bd" "cd"

[[3]]
[1] "abc" "abd" "acd" "bcd"

[[4]]
[1] "abcd"

此外,如果您希望所有组合都带有单独的字母,那么您可以使用:

> Map(as.data.frame, sapply(seq_along(s), function(k) t(combn(s,k))))
[[1]]
  V1
1  a
2  b
3  c
4  d

[[2]]
  V1 V2
1  a  b
2  a  c
3  a  d
4  b  c
5  b  d
6  c  d

[[3]]
  V1 V2 V3
1  a  b  c
2  a  b  d
3  a  c  d
4  b  c  d

[[4]]
  V1 V2 V3 V4
1  a  b  c  d

希望以上内容对您的问题有所帮助


推荐阅读