在R语言数据框中从单元格文本提取信息生成新列
解决R语言dataframe牙齿编码提取与上下颌标记问题
方案一:使用tidyverse工具链(推荐)
先加载tidyverse包(内置stringr用于字符串处理),通过mutate新增目标列:
library(tidyverse) # 处理你的数据框x x <- x %>% mutate( # 提取牙齿编码:匹配"字母+数字"格式的片段 Tooth = str_extract(element, "[a-zA-Z]\\d+"), # 根据编码首字母大小写判断上下颌 Position = case_when( str_detect(Tooth, "^[A-Z]") ~ "U", # 首字母大写→上颌(U) str_detect(Tooth, "^[a-z]") ~ "L" # 首字母小写→下颌(L) ) )
方案二:使用Base R实现
如果不想加载额外包,用基础R函数也能完成需求:
# 提取Tooth列:匹配并提取"字母+数字"的编码部分 x$Tooth <- regmatches(x$element, gregexpr("[a-zA-Z]\\d+", x$element)) %>% unlist() # 生成Position列:判断首字母是否为大写 x$Position <- ifelse(toupper(substr(x$Tooth, 1, 1)) == substr(x$Tooth, 1, 1), "U", "L")
验证示例
用测试数据验证效果:
# 构造测试数据 test_x <- data.frame(element = c("lt P4", "rt m3", "md M1")) # 运行代码后的结果: # element Tooth Position # 1 lt P4 P4 U # 2 rt m3 m3 L # 3 md M1 M1 U
代码说明
- 提取编码的正则
[a-zA-Z]\\d+:[a-zA-Z]匹配任意大小写字母,\\d+匹配1个或多个数字,刚好对应你示例中的P4、m3、M1这类编码格式。 - 上下颌判断逻辑:通过检测编码首字母的大小写,大写对应上颌标记
U,小写对应下颌标记L,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者antecessor
相关产品推荐
相关产品推荐

