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

R语言如何按字符串ID对应值对逗号分隔字符串序列求和

R语言实现多字符串匹配得分求和方案

实现思路

  • 第一步:将df每行的patterns字段按, (逗号加空格)分割为单个字符串向量
  • 第二步:对每个分割得到的字符串,匹配df2中对应的scores值
  • 第三步:将每行匹配到的所有得分求和,合并回原数据框

注意:如果存在patterns中包含df2无记录的字符串,可在sum函数中添加na.rm = TRUE参数忽略缺失值,避免结果返回NA

解决方案

方案1:tidyverse 实现(可读性高,适合处理复杂扩展需求)

library(tidyverse)

# 构造示例数据
df <- data.frame(patterns = c("CCDC127, HSF1, NDUFB9", "CCDC127, EXOC3, YIF1A", "EXOC3, NDUFB9, YIF1A"))
df2 <- data.frame(strings = c("CCDC127", "HSF1", "NDUFB9", "EXOC3", "YIF1A"),
                  scores = c(10, 11, 12, 13, 14))

# 计算得分总和
result <- df %>%
  rowwise() %>%
  mutate(
    sum = sum(df2$scores[match(str_split_1(patterns, ", "), df2$strings)])
  ) %>%
  ungroup()

方案2:base R 实现(无需加载第三方包,运行速度快)

# 构造示例数据
df <- data.frame(patterns = c("CCDC127, HSF1, NDUFB9", "CCDC127, EXOC3, YIF1A", "EXOC3, NDUFB9, YIF1A"))
df2 <- data.frame(strings = c("CCDC127", "HSF1", "NDUFB9", "EXOC3", "YIF1A"),
                  scores = c(10, 11, 12, 13, 14))

# 构建命名字典快速匹配得分
score_dict <- setNames(df2$scores, df2$strings)
# 逐行拆分字符串并求和
df$sum <- sapply(strsplit(df$patterns, ", "), function(x) sum(score_dict[x]))

两种方案运行后得到的结果均与预期输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:24:04