从含部分±组合的数据框提取合法高阶组合的R实现需求
问题:从部分低阶±标记组合提取合法高阶组合
问题背景
我的需求是从包含n个标记(列对应标记)的±组合数据框中,提取仅能从输入衍生的1阶、2阶(示例中总标记数为3)等高阶组合,但之前参考的某问题解决方案会生成非法组合,不符合要求。
输入数据
输入数据框示例代码:
in_df <- data.frame(M1=c('-','+','+','-'), M2=c('-','-','+','-'), M3=c('+','-','-','-'))
数据结构如下:
> in_df M1 M2 M3 1 - - + 2 + - - 3 + + - 4 - - -
原方法的问题
我使用了以下函数生成高阶组合:
nullgrid_expand_dt <- function(df, ...){ as.data.frame(do.call(data.table::CJ, args = c(as.list(df[c(NA, seq_len(nrow(df))), ]), sorted = FALSE, unique = TRUE))) } # out_df <- nullgrid_expand_dt(in_df)
但该函数会生成所有可能的高阶组合,包括输入中不存在的低阶组合(如+/+/+或-/+/+)衍生出的非法项(如NA/+/+、-/+/NA等),这些项无法从输入数据衍生,不符合需求。
非法输出示例(标记X的为非法行)
> out_df M1 M2 M3 1 <NA> <NA> <NA> X 2 <NA> <NA> + 3 <NA> <NA> - 4 <NA> - <NA> 5 <NA> - + 6 <NA> - - 7 <NA> + <NA> 8 <NA> + + X 9 <NA> + - 10 - <NA> <NA> 11 - <NA> + 12 - <NA> - 13 - - <NA> 14 - - + 15 - - - 16 - + <NA> X 17 - + + X 18 - + - X 19 + <NA> <NA> 20 + <NA> + X 21 + <NA> - 22 + - <NA> 23 + - + X 24 + - - 25 + + <NA> 26 + + + X 27 + + -
核心需求
需要修改nullgrid_expand_dt函数,实现:
- 仅保留从输入存在的组合衍生出的高阶组合
- 支持任意数量的标记(列)
- 处理效率高效
内容的提问来源于stack exchange,提问作者DaniCee
相关产品推荐
相关产品推荐

