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

如何使用dplyr从DataFrame字符串列的特定短语后提取目标数字

实现方案

你可以通过正则匹配捕获目标数字,无需固定截取字符长度,适配所有位数的温度、以及风向位置不固定的风速提取场景,配合dplyr的mutate即可完成需求。

核心代码

不需要额外依赖的base R正则版本:

library(dplyr)

df <- df %>%
  mutate(
    # 提取Temp:后第一组连续数字作为温度,自动适配1/2/3位数值
    temperature = as.integer(sub(".*Temp: (\\d+).*", "\\1", weather)),
    # 跳过Wind:后所有非数字内容,提取第一组连续数字作为风速
    wind_speed = as.integer(sub(".*Wind:.*?(\\d+).*", "\\1", weather))
  )

如果你习惯使用stringr包的函数,也可以用str_extract实现:

library(dplyr)
library(stringr)

df <- df %>%
  mutate(
    temperature = as.integer(str_extract(weather, "(?<=Temp: )\\d+")),
    wind_speed = as.integer(str_extract(weather, "Wind:.*?(\\d+)", group = 1))
  )

逻辑说明

  • 温度提取的正则.*Temp: (\\d+).*中,(\\d+)会捕获Temp: 之后的第一串连续数字,不受数值位数影响
  • 风速提取的正则.*Wind:.*?(\\d+).*中,.*?是非贪婪匹配,会自动跳过Wind:和数值之间的所有内容(包括空格、风向字符),无论风向在数值前还是后都能正确提取风速

测试验证

用你提供的样例数据测试,输出结果如下:

weathertemperaturewind_speed
Sunny Temp: 78 F, Humidity: 63%, Wind: SSW 6 mph786
Sunny Temp: 103 F, Humidity: 7%, Wind: 16 SW mph10316
Temp: 88 F, Humidity: 43%, Wind: S 12 mph8812
Cloudy Temp: 81 F, Humidity: 90%, Wind: SW 5 mph815

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:27:05