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

如何在R语言中按条件从数据框文本列解析数字至新列?

R语言按条件解析文本中的数字到指定列

需求:在数据框中,仅对满足grepl("apple", df$col1)条件的行,从col1的文本字符串里提取数字并赋值到col3列;不满足条件(包括col1为NA)的行,col3设为NA。

示例数据:

col1 <- c("I have 1 apple", NA, "I have 2 apples", NA, "I have 3 apples", NA, "I have 4 apples")
col2 <- c(7:13)
df <- as.data.frame(cbind(col1, col2))

df$col3 <- NA

解决方案

方法1:基础R实现

直接用ifelse判断条件,结合readr::parse_number提取数字:

library(readr)

# 筛选含apple的行,仅对这些行解析数字,其余设为NA
df$col3 <- ifelse(grepl("apple", df$col1, na.rm = TRUE), parse_number(df$col1), NA)

grepl中设置na.rm = TRUE,会把col1为NA的行判定为不满足条件,对应col3设为NA,符合需求。

方法2:dplyr风格实现

如果习惯用tidyverse语法,用dplyr::if_else(要求分支类型严格一致):

library(dplyr)
library(readr)

df <- df %>%
  mutate(col3 = if_else(grepl("apple", col1, na.rm = TRUE), 
                        parse_number(col1), 
                        as.numeric(NA)))

这里需要把NA转为数值型,保证if_else两个分支的类型统一。

关于lapply的说明

readr::parse_number本身是向量化函数,可以直接对整个列操作,不需要搭配lapply循环处理每行。强行用lapply反而会增加代码复杂度,不如直接用向量化写法简洁高效。

运行后df$col3的结果为:1, NA, 2, NA, 3, NA, 4,完全符合预期。

内容的提问来源于stack exchange,提问作者Abbey A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:54:59