数据集中所有可能的组合,嵌套组在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代码工作得很好!谢谢传奇。当心。