【问题标题】:Create a list of combinations in r with a condition [duplicate]在r中创建一个带有条件的组合列表[重复]
【发布时间】:2020-12-30 03:29:04
【问题描述】:

我想创建 A、B 和 C 的所有组合的列表,使得 A+B+C=100 此列表应如下所示。

 A  B  C    
 0  0 100
100 0  0
 99 1  0
 98 2  0
 99 0  1

我不知道如何在 R 中解决这个问题。

【问题讨论】:

  • partitions::compositions(100, 3)

标签: r list dataframe combinations


【解决方案1】:

我们可以使用complete来生成所有的组合然后做一个filter

library(dplyr)
library(tidyr)
complete(df1, A, B, C) %>% 
      filter((A + B + C) == 100)

或者使用交叉连接

library(data.table)
setDT(df1)[, CJ(A, B, C, unique = TRUE)][(A + B + C) == 100]

【讨论】:

    【解决方案2】:
    library(tidyr)
    library(dplyr)
    

    如果您想要独特的组合,这可行:

    with(dfa, crossing(A, B, C)) %>%
      filter(rowSums(.) == 100)
    

    如果你需要所有的组合,那么试试这个:

    with(dfa, expand.grid(A, B, C)) %>%
      filter(rowSums(.) == 100) %>% 
      rename_all(list(~names(dfa)))
    

    【讨论】:

      【解决方案3】:

      使用expand.grid + rowSums + subset 的基本 R 选项

      out <- subset(
        s <- with(df,expand.grid(A, B, C)),
        rowSums(s) == 100
      )
      

      out <- subset(
        s <- do.call(expand.grid,df),
        rowSums(s) == 100
      )
      

      你会看到

      > nrow(out)
      [1] 5151
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-20
        • 2022-01-11
        • 2015-06-19
        • 2021-08-20
        相关资源
        最近更新 更多