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

如何在R中筛选薪资和≥2000万的组合并生成含姓名的DataFrame

解决方案

针对你的需求,我们可以生成所有非空的员工子集,计算每个子集的薪资总和,再筛选出总和达标(≥20000000)的组合,最终整理成目标DataFrame。以下是具体实现代码:

示例代码

首先构造你的示例数据:

library(dplyr)
library(tidyr)

# 构造示例DataFrame
df <- tibble(
  Name = paste0("Name ", 1:5),
  Salary = c(5000000, 7000000, 9000000, 12000000, 14000000)
)

然后生成所有符合条件的组合:

target <- 20000000
n <- nrow(df)

# 生成所有非空子集的索引(从1个元素到n个元素的组合)
all_combinations <- lapply(1:n, function(m) combn(seq_len(n), m, simplify = FALSE)) %>%
  unlist(recursive = FALSE)

# 处理每个子集,提取姓名、计算薪资总和
result_list <- lapply(all_combinations, function(idx) {
  subset <- df[idx, ]
  tibble(
    Name_Combination = paste(subset$Name, collapse = ", "),
    Total_Salary = sum(subset$Salary)
  )
})

# 合并成DataFrame并筛选达标组合
result_df <- bind_rows(result_list) %>%
  filter(Total_Salary >= target) %>%
  arrange(Total_Salary)

# 查看结果
print(result_df)

代码说明

  • 用lapply+combn生成所有长度的非空子集,解决了combn只能指定固定长度的问题;
  • 对每个子集,拼接姓名成字符串、计算总薪资;
  • 最后筛选出总薪资≥目标值的组合,还可以按总薪资排序方便查看;
  • 对于12-15条数据的情况,总子集数是2^15 -1 = 32767,这个量级在R中完全可以处理,30个DataFrame也能批量循环处理。

批量处理30个DataFrame的思路

如果你的30个DataFrame是放在列表里(比如df_list),可以用lapply批量处理:

df_list <- list(df1, df2, ..., df30) # 假设这是你的30个DataFrame列表

batch_result <- lapply(df_list, function(df) {
  n <- nrow(df)
  all_combinations <- lapply(1:n, function(m) combn(seq_len(n), m, simplify = FALSE)) %>%
    unlist(recursive = FALSE)
  
  result_list <- lapply(all_combinations, function(idx) {
    subset <- df[idx, ]
    tibble(
      Name_Combination = paste(subset$Name, collapse = ", "),
      Total_Salary = sum(subset$Salary)
    )
  })
  
  bind_rows(result_list) %>%
    filter(Total_Salary >= target) %>%
    arrange(Total_Salary)
})

# 每个元素对应一个原DataFrame的结果
names(batch_result) <- paste0("Result_", 1:30)

内容的提问来源于stack exchange,提问作者ColinM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:45:26