在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中创建一个带有条件的组合列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章
从给定列表中创建一个包含所有可能组合的表,其中包含两列(excel)
如何使用 stream().reduce() 基于谓词从一个列表中创建 2 个列表 [重复]