You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 14:42:42