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

如何在R data.table中清洗包含字符串与数字的混合类型列

实现方案

核心通过正则匹配完成两列的清洗需求,操作步骤如下:

  • 加载data.table包,将原始数据框转为data.table对象
  • 清洗name列:先剔除所有非字母、非空格字符,再处理多余空格
  • 清洗number列:提取字符串中首个连续的数字序列
# 加载依赖包
library(data.table)
library(stringr) # 如需纯base实现可替换为下文的base写法

# 构造原始数据
df <- data.frame(x=c(1,2,3,4,5,6,7,8),
                 name=c('Tom', 'Maria. Anna3', 'Ina.2', 'Anna13', 'Tim2a', 'Zoé', 'Mark_1', 'Bea: 2'), 
                 number=c('12, 13', '11/12', '3b', '12, 13', '134z', 'number 14', 'B3', '3-5'))

# 转为data.table对象
setDT(df)

# 清洗name列:仅保留字母与空格,处理多余空格
df[, name := gsub("\\s+", " ", trimws(gsub("[^[:alpha:] ]", "", name)))]

# 清洗number列:提取首个连续数字
# 写法1:用stringr(简洁易读)
df[, number := str_extract(number, "\\d+")]

# 写法2:纯base R实现,无需额外加载包
# df[, number := regmatches(number, regexpr("\\d+", number))]

# 查看结果
print(df)

运行后得到的结果和你给出的df_cleaned完全一致,符合清洗要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:57:03