如何在R语言中找出与CombinedValue匹配的Powervalue求和组合?
在R中找出PowerValue组合匹配目标值的实现方案
完全可以实现这个需求,以下是具体的代码实现步骤:
1. 构造示例数据框
先还原你提到的两个数据框:
# 数据框1:包含Index和Powervalue列 df1 <- data.frame( Index = 1:6, Powervalue = c(1, 2, 4, 8, 16, 32) ) # 数据框2:包含CombinedValue列 df2 <- data.frame( CombinedValue = c(20, 50) )
2. 定义组合查找函数
编写函数找出所有和为目标值的Powervalue不重复组合(每个值最多使用一次):
find_power_combinations <- function(target, power_values) { combinations <- list() # 遍历所有可能的子集大小 for (k in 1:length(power_values)) { # 生成k个元素的所有组合 combos <- combn(power_values, k, simplify = FALSE) # 筛选和等于目标值的组合 valid_combos <- combos[sapply(combos, sum) == target] if (length(valid_combos) > 0) { combinations <- c(combinations, valid_combos) } } # 返回格式化后的组合字符串,无匹配则返回NA if (length(combinations) == 0) { return(NA_character_) } else { return(sapply(combinations, paste, collapse = ", ")) } }
3. 生成结果数据框
可以选择两种方式生成最终结果:
方法一:使用dplyr
library(dplyr) library(tidyr) result_df <- df2 %>% rowwise() %>% mutate(possiblecodes = list(find_power_combinations(CombinedValue, df1$Powervalue))) %>% unnest(possiblecodes) print(result_df)
方法二:使用基础R
# 遍历每个CombinedValue生成结果 result_list <- lapply(df2$CombinedValue, function(val) { codes <- find_power_combinations(val, df1$Powervalue) data.frame(CombinedValue = val, possiblecodes = codes) }) # 合并结果 result_df <- do.call(rbind, result_list) print(result_df)
运行结果
执行代码后会得到如下结果:
CombinedValue possiblecodes 1 20 4, 16 2 50 2, 16, 32
内容的提问来源于stack exchange,提问作者Rajesh Addunuri
相关产品推荐
相关产品推荐

