【问题标题】:How to use expand.grid to create all possible combinations between two columns in R?如何使用 expand.grid 在 R 中的两列之间创建所有可能的组合?
【发布时间】:2021-06-18 16:30:18
【问题描述】:

我有一个包含四列的数据框,我需要扩展它以包含两个特定列的值之间的所有可能组合,而不删除其他列。

我的数据集的玩具版本:

mydf <- tibble(ID = c(1:3), Group = rep("XX",3) ,Names1 = c("a","b","b"),Names2 = c("c","d","e"))

mydf
  ID Group Names1 Names2
1  1    XX      a      c
2  2    XX      b      d
3  3    XX      b      e

当我在变量 Names1 和 Names2 上使用 expand.grid() 时,我获得了我想要的组合,但其他列消失了。执行类似操作的其他函数(如 expand()complete())不起作用,因为它们删除了 Names1 中的重复值。

expand.grid(mydf$Names1, mydf$Names2)
  Var1 Var2
1    a    c
2    b    c
3    b    c
4    a    d
5    b    d
6    b    d
7    a    e
8    b    e
9    b    e

我尝试在mutate() 中调用expand.grid(),但结果是来自expand.grid() 的复制输出。

mydf %>% mutate(Combs = nest(expand.grid(Names1, Names2)))

A tibble: 3 x 5
     ID Group Names1 Names2 Combs$data      
  <int> <chr> <chr>  <chr>  <list>          
1     1 XX    a      c      <tibble [9 x 2]>
2     2 XX    b      d      <tibble [9 x 2]>
3     3 XX    b      e      <tibble [9 x 2]>

我想获得这样的东西,保留其余列和 Names1 中的复制值:

   ID Group Names1 Names2
1   1   XX   a    c
2   2   XX   b    c
3   3   XX   b    c
4   1   XX   a    d
5   2   XX   b    d
6   3   XX   b    d
7   1   XX   a    e
8   2   XX   b    e
9   3   XX   b    e

我更喜欢使用 tidyverse,因为我计划在整个数据集上使用 group_by(Group)

感谢您的帮助!

【问题讨论】:

  • 我不明白您如何保留其他列。在您想要的结果中,IDGroup 列是否对应 Names1 值或 Names2 值的原始行?我认为你必须选择一个。
  • Names1 = aNames2 = c 你有ID = 1;当Names1 = aNames2 = d 你有ID = 1 等等。似乎您为每个扩展行提供了与mydf 中的变量Names1 相对应的IDGroup 呢?是否也从对应的Names1获取其值?
  • 您还想在数据中包含重复项吗? b c、b d 和 be 等值会重复。
  • 是的,ID应该跟在Name1后面,Group不会改变。

标签: r dataframe tidyverse combinations expand


【解决方案1】:

不确定这是您想要的。但它确实提供了所有可能的组合。也许值得一看。

my_grid <- expand_grid(ID = c(1:3), Group = rep("XX",3) , 
                   Names1 = c("a","b","b"), 
                   Names2 = c("c","d","e") )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多