如何将含数字与字母的字符串拆分为数字列和字母列?
拆分含数字和字母的字符串为数字列与字母列
这里提供两种R语言的实现方案,分别适用于偏好基础包和tidyverse工具链的场景:
方案一:使用基础R实现(无需额外安装包)
通过正则表达式匹配提取数字和字母部分,无字母的位置自动填充NA:
x <- c("1", "12", "14A", "12B", "6") # 提取数字部分并转为数值类型 num_part <- as.numeric(sub("([0-9]+).*", "\\1", x)) # 提取字母部分,无字母时设为NA char_part <- ifelse(grepl("[A-Za-z]", x), sub("[0-9]+", "", x), NA) # 组合为数据框 result <- data.frame(数字列 = num_part, 字母列 = char_part) print(result)
运行后输出:
数字列 字母列 1 1 <NA> 2 12 <NA> 3 14 A 4 12 B 5 6 <NA>
方案二:使用tidyverse工具链(需先安装stringr/tidyverse包)
借助stringr包的str_extract函数可以更简洁地完成提取,无匹配项时自动返回NA:
# 若未安装tidyverse先执行:install.packages("tidyverse") library(tidyverse) x <- c("1", "12", "14A", "12B", "6") result <- tibble(原始字符串 = x) %>% mutate( 数字列 = as.numeric(str_extract(原始字符串, "^\\d+")), 字母列 = str_extract(原始字符串, "[A-Za-z]+") ) print(result)
运行后输出:
# A tibble: 5 × 3 原始字符串 数字列 字母列 <chr> <dbl> <chr> 1 1 1 NA 2 12 12 NA 3 14A 14 A 4 12B 12 B 5 6 6 NA
内容的提问来源于stack exchange,提问作者R-MASHup
相关产品推荐
相关产品推荐

