gpt4 book ai didi

r - 生成独特的数字模式(例如,1221 被视为与 2112 相同的模式)

转载 作者:行者123 更新时间:2023-12-04 08:26:52 26 4
gpt4 key购买 nike

我有一个包含 7 种不同稀释度的数据框,我想以所有可能的组合将其分配到 3 个不同的 bin 中,以便以后在 lpSolve 中使用。 .我可以使用以下方法生成所有 2187 种可能的组合:

expand.grid(1:3, 1:3, 1:3, 1:3, 1:3, 1:3, 1:3)

但是,由于实际的 bin 编号并不重要(但位置很重要),因此在此上下文中以下条目都被视为相同:
c(1, 1, 2, 2, 2, 3, 3)
c(2, 2, 3, 3, 3, 1, 1)
c(3, 3, 1, 1, 1, 2, 2)
c(3, 3, 2, 2, 2, 1, 1)
c(1, 1, 3, 3, 3, 2, 2)
...

如何通过过滤 expand.grid 仅生成唯一的“模式”输出或使用另一个(自定义)函数。例如,从 rle 输出的长度所有上述向量中的一个将是 2 3 2 ,但对于 c(1, 1, 2, 2, 2, 1, 1) 也是如此这不应被视为与上述相同。

有什么快速解决方法吗?我不需要超过 5 个 bin 和 8 个稀释度。

最佳答案

这个?

data <- expand.grid(1:3, 1:3, 1:3, 1:3, 1:3, 1:3, 1:3)
len <- apply(data,1,function(x) c(rle(x)$lengths[1:7], nchar(paste(unique(sort(rle(x)$value)), collapse=''))))
data <- data[!(duplicated(t(len))), ]

或者,正如@Arun 指出的那样:
data <- expand.grid(1:3, 1:3, 1:3, 1:3, 1:3, 1:3, 1:3)
len <- apply(data,1,function(x) c(rle(x)$lengths[1:7], length(unique(x))))
data <- data[!(duplicated(t(len))), ]

关于r - 生成独特的数字模式(例如,1221 被视为与 2112 相同的模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15268921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com