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

如何使用tidyr从现有数据列提取字母并新增对应列

可以通过tidyverse生态下的工具快速实现你的需求,先修正你提到的正则误区:\w等价于[a-zA-Z0-9_],会同时匹配数字和下划线,提取纯字母备注建议用[a-zA-Z]作为匹配规则。

以下提供两种实现方案:

方案1:使用tidyr::extract实现(符合你指定用tidyr的需求)

extract函数可以直接通过正则捕获组,一次性拆分出你需要的两列:

# 先加载依赖包
library(tidyverse)

# 示例数据,替换为你自己的数据集即可
df <- tibble(value = c("123:a", "45:b", "6789:c", "0:d"))

df_result <- df %>%
  extract(
    col = value, # 要拆分的原始列
    into = c("clean_value", "value_note"), # 拆分后的两列名,第一个是保留数字+冒号的列,第二个是字母备注列
    regex = "([0-9:]+)([a-zA-Z]*)", # 两个捕获组分别匹配「数字+冒号」和「字母」
    remove = FALSE # 设为FALSE保留原始value列,设为TRUE则会删除原始列
  )

如果你的字母备注在数字+冒号的前面,只需要把正则的两个捕获组调换顺序即可:regex = "([a-zA-Z]*)([0-9:]+)",同时调整into参数里的列名顺序。

方案2:使用dplyr+stringr实现(更灵活易调整)

如果你需要更灵活的调整匹配规则,用str_extract提取字母、str_remove_all清理原始列的写法更易读:

library(tidyverse)

df_result <- df %>%
  mutate(
    value_note = str_extract(value, "[a-zA-Z]+"), # 提取纯字母存入新列
    clean_value = str_remove_all(value, "[a-zA-Z]+") # 移除原列的字母,保留数字和冒号
  )

如果你不需要修改原始value列,仅新增字母备注列,只保留value_note对应的代码行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:36:03