如何在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
相关产品推荐
相关产品推荐

