在R中合并相似列名的列,提取REQID与PRODUCTID对应组合
解决方案
假设你的数据框名为df,可以用tidyverse工具链快速解决这个问题:
1. 加载依赖包
library(tidyverse)
2. 提取有效需求ID列
把所有以REQID开头的列转成单列,只保留非空值:
req_data <- df %>% select(starts_with("REQID")) %>% pivot_longer(cols = everything(), names_to = NULL, values_to = "RequirementID") %>% drop_na(RequirementID)
3. 提取有效产品ID列
用同样逻辑处理PRODUCTID相关列:
prod_data <- df %>% select(starts_with("PRODUCTID")) %>% pivot_longer(cols = everything(), names_to = NULL, values_to = "Product") %>% drop_na(Product)
4. 合并并去重
因为原始数据每行对应一组有效组合,直接按行合并后提取唯一值即可:
final_result <- bind_cols(req_data, prod_data) %>% distinct()
示例验证
如果你的原始数据是:
df <- tibble( REQID = c("R001", NA, NA), REQID22 = c(NA, "R022", NA), REQID433 = c(NA, NA, "R433"), PRODUCTID = c("P001", NA, NA), PRODUCTID12 = c(NA, "P012", NA), PRODUCTID236 = c(NA, NA, "P236") )
运行代码后,final_result会输出:
| RequirementID | Product |
|---|---|
| R001 | P001 |
| R022 | P012 |
| R433 | P236 |
这个方法完全基于原始数据中已有的对应关系,不会生成额外的无效组合。
内容的提问来源于stack exchange,提问作者Maya
相关产品推荐
相关产品推荐

