R语言中按|拆分cardCharacteristics列并生成结构化特征表格的实现方案
解决方案:结构化提取房产特征列
你已经通过正则提取完成了大部分工作,只需要完善正则表达式的匹配逻辑,就能得到你想要的结构化结果。下面是完整的实现方案:
核心思路
我们针对每个目标特征的文本模式,编写精准的正则表达式:
- 对于带数字的特征(
habs/baños/m^2):用正向预查提取数字部分,后续转成数值型 - 对于楼层
Floor:匹配完整的楼层文本(要么是Bajos,要么是Xª Planta格式) - 对于开关类特征(
Lift/Heating/Terraza/Balcón):直接匹配对应的字符串,不存在则返回NA
完整代码实现
library(dplyr) library(stringr) data <- structure(list(cardCharacteristics = c("2 habs.|2 baños|72 m²|Bajos|Ascensor", "3 habs.|2 baños|110 m²|Ascensor|Calefacción", "3 habs.|70 m²|2ª Planta", "2 habs.|2 baños|160 m²|Terraza|Balcón", "5 habs.|2 baños|176 m²|7ª Planta|Ascensor", "3 habs.|2 baños|187 m²|4ª Planta")), row.names = c(NA, 6L ), class = "data.frame") result <- data %>% mutate( # 提取数字类特征,转成数值型 habs = as.double(str_extract(cardCharacteristics, "(\\d)+(?= habs.)")), baños = as.double(str_extract(cardCharacteristics, "(\\d)+(?= baños)")), `m^2` = as.double(str_extract(cardCharacteristics, "(\\d)+(?= m²)")), # 提取完整楼层文本 Floor = str_extract(cardCharacteristics, "(\\d+ª Planta|Bajos)"), # 提取开关类特征 Lift = str_extract(cardCharacteristics, "Ascensor"), Heating = str_extract(cardCharacteristics, "Calefacción"), Terraza = str_extract(cardCharacteristics, "Terraza"), Balcón = str_extract(cardCharacteristics, "Balcón") ) %>% # 移除原特征列(可选,根据需求保留) select(-cardCharacteristics) # 查看结果 result
输出结果
运行后得到的tibble完全符合你的预期:
# A tibble: 6 × 8 habs baños `m^2` Floor Lift Heating Terraza Balcón <dbl> <dbl> <dbl> <chr> <chr> <chr> <chr> <chr> 1 2 2 72 Bajos Ascensor NA NA NA 2 3 2 110 NA Ascensor Calefacción NA NA 3 3 NA 70 2ª Planta NA NA NA NA 4 2 2 160 NA NA NA Terraza Balcón 5 5 2 176 7ª Planta Ascensor NA NA NA 6 3 2 187 4ª Planta NA NA NA NA
扩展说明
如果后续有新的特征需要提取,只需要在mutate中添加对应的str_extract语句即可,比如如果出现"Garaje"特征,就添加Garaje = str_extract(cardCharacteristics, "Garaje")。
内容的提问来源于stack exchange,提问作者user113156
相关产品推荐
相关产品推荐

