You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从含部分±组合的数据框提取合法高阶组合的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:22:40