R语言如何从其他列提取值填充Distance、Metric列的NULL/NA空值
# 安装依赖(首次使用执行) install.packages("tidyverse") # 加载依赖包 library(tidyverse) # 构造示例数据,实际使用时替换为你的数据集 df <- tibble( Case = c("*jsalidjsalj; 10 KM daskdsadok; 73 saujdhuj", "*dskfnsldfn sadjidisaj 500 - 550 M wqldl"), Distance = c(NA_real_, NA_real_), Metric = c(NA_character_, NA_character_) ) # 核心处理代码 df_processed <- df %>% mutate( # 正则匹配提取数值和单位,适配单值、区间两种场景 extract_res = str_match(Case, "(\\d+)\\s*(?:-\\s*\\d+)?\\s*(KM|M)"), # 仅填充原列为NA的位置,不覆盖已有数据 Distance = coalesce(Distance, as.numeric(extract_res[,2])), Metric = coalesce(Metric, extract_res[,3]) ) %>% # 删除中间辅助列 select(-extract_res)
- 正则规则可直接适配你给出的两类场景:单值加单位的格式会直接提取对应数值和单位,区间加单位的格式默认提取区间首个数值和对应单位
- 如果需要适配更多单位,只需要修改正则中
(KM|M)部分,比如需要支持中文单位可改为(KM|M|米|公里) - 若你的Case列存在多组距离数据,可把
str_match替换为str_match_all自行指定取第几次匹配的结果
内容的提问来源于stack exchange,提问作者Alark
相关产品推荐
相关产品推荐

