数据集中所有可能的组合,嵌套组在R中顺序排列

数据集中所有可能的组合,嵌套组在R中顺序排列,r,R,我早些时候发布了这个问题,但在发表了一些评论之后,我意识到需要对df和结果进行更好的解释。此外,我意识到简化的数据结构可以用来实现我的目标 我需要找到特定序列中的所有值组合 在示例df中,您可以看到嵌套的分组结构,其中GROUP嵌套在SAMPLE和SITE中。我的实际数据集有大约1000个样本分布在30个站点。请注意,每个组都是按顺序(1到3)排列的,并且该顺序需要保留在最终结果中,因为这是未来分析的关键部分。换句话说,不需要将GROUP2或3置于GROUP1之前的组合 在每个组中在ASSIGN

我早些时候发布了这个问题,但在发表了一些评论之后,我意识到需要对
df
结果进行更好的解释。此外,我意识到简化的数据结构可以用来实现我的目标

我需要找到特定序列中的所有值组合

在示例
df
中,您可以看到嵌套的分组结构,其中
GROUP
嵌套在
SAMPLE
SITE
中。我的实际数据集有大约1000个
样本
分布在30个
站点
。请注意,每个
都是按顺序(1到3)排列的,并且该顺序需要保留在最终结果中,因为这是未来分析的关键部分。换句话说,不需要将
GROUP
2或3置于
GROUP
1之前的组合

在每个
组中
ASSIGN_1
ASSIGN_2
ASSIGN_3
列中有2或3个文本或数字值。例如,F1有3个组,每个组有2种可能性:
group
1有4个和unk_palmer_trib<代码>组
2分为6.1和5.2;“第三组”有10.1和6.1。您可以看到
SAMPLE
B2也有三个组,其中
GROUP
1和3有两种可能性,
GROUP
2有三种可能性

因此…我需要在保留
组的顺序的同时,在
赋值
列中找到所有可能的值组合。请注意,
结果
中的
选项
列是
df
中的
赋值
列的各种值组合,您会注意到这些组合保留了
序列(即1到3)。还请注意,
结果
中包含数据的
选项
列数(即,无“NAs”)对应于保留
组序列的
分配
列的所有可能组合<代码>样本
F1有3组,每组有2种可能性,因此有8种可能的结果(即2 x 2 x 2;参见
选项
第1列至第8列)<代码>样本
B2有3组(2组有两种可能性,1组有三种可能性),因此有12种可能的结果(即2 x 3 x 2;参见
选项
第1至12列)

为了真正理解这一点,让我们看看
df
中的
SAMPLE
F1和
result
来说明这些组合需要如何构造选项_1
只是
df
中的
ASSIGN_1
列<代码>选项_2
分配_1
中的第1行(即组_1=4),然后是分配_2中的第2行和第3行(即组_2=5.2和组_3=6.1)。'选项_3'是
ASSIGN_1
中的第1行(即组_1=4),是
ASSIGN_2
中的第2行(即组_2=5.2),是
ASSIGN_1
中的第3行(即组_3=10.1)。在瑙瑟姆重复

在我的实际数据集中,一些
最多可以有5个
分配
列…因此对于一些
样本
,可能的组合数量可能会很大

我曾尝试在
ave()
中使用
expand.grid()
,但未能使代码正常工作。我对所有解决方案都持开放态度,但更喜欢
基本包
解决方案,因为我希望避免加载包。我还怀疑,
df
可能需要以某种方式进行重组……只要在最终产品中保留
序列,这是完全正确的

如果我需要澄清,请告诉我

提前感谢你的帮助

df <- read.table(text = "SITE   SAMPLE  GROUP   ASSIGN_1    ASSIGN_2    ASSIGN_3
A1  F1  1   4   unk_palmer_trib NA
A1  F1  2   6.1 5.2 NA
A1  F1  3   10.1    6.1 NA
M15 B2  1   6.2 6.4 NA
M15 B2  2   10.1    6.1 5.2
M15 B2  3   10.1    6.1 NA
", header = TRUE)

result <- read.table(text = "SITE   SAMPLE  GROUP   OPTION_1    OPTION_2    OPTION_3    OPTION_4    OPTION_5    OPTION_6    OPTION_7    OPTION_8    OPTION_9    OPTION_10   OPTION_11   OPTION_12
A1  F1  1   4   4   4   4   unk_palmer_trib unk_palmer_trib unk_palmer_trib unk_palmer_trib NA  NA  NA  NA
A1  F1  2   6.1 5.2 5.2 6.1 6.1 5.2 5.2 6.1 NA  NA  NA  NA
A1  F1  3   10.1    6.1 10.1    6.1 10.1    6.1 10.1    6.1 NA  NA  NA  NA
M15 B2  1   6.2 6.2 6.2 6.2 6.2 6.2 6.4 6.4 6.4 6.4 6.4 6.4
M15 B2  2   10.1    6.1 10.1    6.1 5.2 5.2 10.1    6.1 10.1    6.1 5.2 5.2
M15 B2  3   10.1    6.1 6.1 10.1    10.1    6.1 10.1    6.1 6.1 10.1    10.1    6.1
", header = TRUE)
df这里有一个刺:-)


func代码工作得很好!谢谢传奇。当心。