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

在mutate()中使用str_extract_all无法实现逐行数字求和的求助

解决方案

针对数据框每行提取ID字段中1-3的数字并求和,你可以通过以下几种方式实现:

方法1:使用dplyr的行分组(rowwise)

通过rowwise()让每行独立处理,结合str_extract_all提取数字后求和:

library(dplyr)
library(stringr)

test <- data.frame(ID=c("2VG1AR", "1OR2AG", "1GV1OA"),
                   value = c(4,8,2))

# 计算每行数字和并添加新列
test_processed <- test %>%
  rowwise() %>%
  mutate(num_sum = sum(as.numeric(str_extract_all(ID, "[1-3]", simplify = TRUE)))) %>%
  ungroup()

# 查看结果
test_processed

输出:

ID value num_sum
1 2VG1AR     4       3
2 1OR2AG     8       3
3 1GV1OA     2       2

这里正则[1-3]精准匹配单个1/2/3数字,避免了原正则可能匹配到无关符号的问题。rowwise()确保每行单独计算,最后ungroup()取消行分组恢复数据框默认结构。

方法2:使用purrr的map_dbl(高效无分组)

如果不想用行分组,purrr::map_dbl可以直接遍历str_extract_all返回的列表,对每个元素求和:

library(dplyr)
library(stringr)
library(purrr)

test_processed <- test %>%
  mutate(num_sum = map_dbl(str_extract_all(ID, "[1-3]"), ~sum(as.numeric(.x))))

该方法无需分组,性能更优,适合处理大规模数据。

方法3:Base R 实现(无额外依赖)

如果不想加载tidyverse包,用base R的sapply也能完成:

library(stringr)

test$num_sum <- sapply(str_extract_all(test$ID, "[1-3]"), function(x) sum(as.numeric(x)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:08:10