在r中创建一个带有条件的组合列表[重复]

Posted

技术标签:

【中文标题】在r中创建一个带有条件的组合列表[重复]【英文标题】:Create a list of combinations in r with a condition [duplicate] 【发布时间】: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) 【参考方案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

【讨论】:

以上是关于在r中创建一个带有条件的组合列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

R: 从条件列表中创建指标列。

从给定列表中创建一个包含所有可能组合的表,其中包含两列(excel)

如何在R中创建字符串组合

如何使用 stream().reduce() 基于谓词从一个列表中创建 2 个列表 [重复]

如何在 HTML/Javascript 中创建可编辑的组合框?

从元组的元组中创建一个列表