R语言基于字符列匹配求和新增dataframe列的dplyr实现方法
解决方案
以下方案全程保留mean_data中initial_seeds列的原始字符格式,也不需要修改score_data中seed列的数值类型,仅用dplyr+stringr的基础函数即可实现,默认计算逻辑为comb_score等于当前行initial_seeds包含的所有seed对应score的总和,如果需要其他计算逻辑替换求和函数即可。
# 加载需要的包,均属于tidyverse生态 library(dplyr) library(stringr)
核心处理代码:
result <- mean_data %>% # 逐行处理mean_data rowwise() %>% mutate( # 用单词边界\\b避免匹配错误,比如seed=1不会误匹配到initial_seeds里的11 comb_score = sum(score_data$score[str_detect(initial_seeds, paste0("\\b", score_data$seed, "\\b"))]) ) %>% # 取消行组模式避免后续操作出错 ungroup()
该方案全程不会对initial_seeds列做拆分、替换等修改操作,列的原始格式完全保留,运行后得到的结果如下:
| initial_seeds | mean | comb_score |
|---|---|---|
| 1,2 | 5.6 | 165 |
| 2,3 | 2.4 | 110 |
| 3,4 | 6.5 | 75 |
如果有其他计算需求,比如要取匹配score的平均值,把代码中的sum改成mean即可,不需要改动其他逻辑。
内容的提问来源于stack exchange,提问作者Fully Aquatic
相关产品推荐
相关产品推荐

