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

从斜杠分隔文本提取指定内容并生成新列的R技术需求

从tibble字符串列中提取层级内容

现有如下tibble格式数据:

# A tibble: 60 × 1
   characteristicsMore                                                                                                              
   <chr>                                                                                                                            
 1 "/es/comprar/viviendas/torrox/urbanizacion-santa-rosa/calefaccion/l|/es/comprar/viviendas/torrox/urbanizacion-santa-rosa/terraza…
 2 ""                                                                                                                               
 3 "/es/comprar/viviendas/burgos-capital/san-pedro-y-san-felices/calefaccion/l"                                                     
 4 ""                                                                                                                               
 5 "/es/comprar/viviendas/mancha-real/todas-las-zonas/calefaccion/l|/es/comprar/viviendas/mancha-real/todas-las-zonas/terraza/l|/es…
 6 "/es/comprar/viviendas/torrelavega/centro/calefaccion/l"                                                                          
 7 ""                                                                                                                               
 8 ""                                                                                                                               
 9 "/es/comprar/viviendas/san-vicente-del-raspeig-sant-vicent-del-raspeig/haygon-universidad/calefaccion/l|/es/comprar/viviendas/sa…

需要从characteristicsMore列的斜杠分隔字符串中提取指定内容:

  • 提取第4层级内容(如torrox)作为col1
  • 提取第5层级内容(如urbanizacion-santa-rosa)作为col2
  • 若单元格内存在以|分隔的多观测,提取每个观测的第6层级内容(如calefaccion、terraza),以|拼接后作为col3

期望输出示例:

col1              col2                       col3
torrox            urbanizacion-santa-rosa    calefaccion|terraza
""                ""                         ""
burgos-capital    san-pedro-y-san-felices    calefaccion

完整数据结构:

df = structure(list(characteristicsMore = c("/es/comprar/viviendas/torrox/urbanizacion-santa-rosa/calefaccion/l|/es/comprar/viviendas/torrox/urbanizacion-santa-rosa/terraza/l|/es/comprar/viviendas/torrox/urbanizacion-santa-rosa/piscina/l", 
"", "/es/comprar/viviendas/burgos-capital/san-pedro-y-san-felices/calefaccion/l", 
"", "/es/comprar/viviendas/mancha-real/todas-las-zonas/calefaccion/l|/es/comprar/viviendas/mancha-real/todas-las-zonas/terraza/l|/es/comprar/viviendas/mancha-real/todas-las-zonas/piscina/l", 
"/es/comprar/viviendas/torrelavega/centro/calefaccion/l", "", 
"", "/es/comprar/viviendas/san-vicente-del-raspeig-sant-vicent-del-raspeig/haygon-universidad/calefaccion/l|/es/comprar/viviendas/san-vicente-del-raspeig-sant-vicent-del-raspeig/haygon-universidad/terraza/l|/es/comprar/viviendas/san-vicente-del-raspeig-sant-vicent-del-raspeig/haygon-universidad/piscina/l", 
"", "", "", "/es/comprar/viviendas/moriles/todas-las-zonas/terraza/l", 
"/es/comprar/viviendas/zamora-capital/ciudad-jardin-vista-alegre/calefaccion/l|/es/comprar/viviendas/zamora-capital/ciudad-jardin-vista-alegre/terraza/l|/es/comprar/viviendas/zamora-capital/ciudad-jardin-vista-alegre/piscina/l", 
"/es/comprar/viviendas/navalcarnero/centro/calefaccion/l|/es/comprar/viviendas/navalcarnero/centro/terraza/l", 
"/es/comprar/viviendas/alcaudete/todas-las-zonas/terraza/l", 
"/es/comprar/viviendas/caravaca-de-la-cruz/todas-las-zonas/terraza/l", 
"", "/es/comprar/viviendas/paredes-de-nava/todas-las-zonas/calefaccion/l", 
"/es/comprar/viviendas/ventas-de-huelma/todas-las-zonas/terraza/l|/es/comprar/viviendas/ventas-de-huelma/todas-las-zonas/piscina/l", 
"", "/es/comprar/viviendas/villa-del-prado/todas-las-zonas/calefaccion/l|/es/comprar/viviendas/villa-del-prado/todas-las-zonas/terraza/l|/es/comprar/viviendas/villa-del-prado/todas-las-zonas/piscina/l", 
"", "/es/comprar/viviendas/barcelona-capital/el-camp-d-en-grassot-i-gracia-nova/calefaccion/l|/es/comprar/viviendas/barcelona-capital/el-camp-d-en-grassot-i-gracia-nova/terraza/l", 
"/es/comprar/viviendas/barcelona-capital/el-camp-d-en-grassot-i-gracia-nova/calefaccion/l|/es/comprar/viviendas/barcelona-capital/el-camp-d-en-grassot-i-gracia-nova/terraza/l", 
"/es/comprar/viviendas/campillos/todas-las-zonas/terraza/l", 
"", "", "/es/comprar/viviendas/salobrena/centro/calefaccion/l|/es/comprar/viviendas/salobrena/centro/terraza/l", 
"/es/comprar/viviendas/santander/numancia-san-fernando/calefaccion/l", 
"/es/comprar/viviendas/sant-joan-despi/les-planes/calefaccion/l", 
"/es/comprar/viviendas/elgoibar/todas-las-zonas/calefaccion/l", 
"", "/es/comprar/viviendas/las-torres-de-cotillas/todas-las-zonas/calefaccion/l", 
"/es/comprar/viviendas/balaguer/todas-las-zonas/calefaccion/l|/es/comprar/viviendas/balaguer/todas-las-zonas/terraza/l", 
"/es/comprar/viviendas/l-alcudia/todas-las-zonas/terraza/l", 
"/es/comprar/viviendas/ubeda/todas-las-zonas/calefaccion/l|/es/comprar/viviendas/ubeda/todas-las-zonas/terraza/l|/es/comprar/viviendas/ubeda/todas-las-zonas/piscina/l", 
"/es/comprar/viviendas/albuixech/todas-las-zonas/calefaccion/l|/es/comprar/viviendas/albuixech/todas-las-zonas/terraza/l", 
"/es/comprar/viviendas/dolores/todas-las-zonas/terraza/l", "/es/comprar/viviendas/algete/algete-pueblo/calefaccion/l|/es/comprar/viviendas/algete/algete-pueblo/terraza/l|/es/comprar/viviendas/algete/algete-pueblo/piscina/l", 
"/es/comprar/viviendas/madrid-capital/nino-jesus/calefaccion/l|/es/comprar/viviendas/madrid-capital/nino-jesus/terraza/l", 
"/es/comprar/viviendas/jaen-capital/renfe-bulevar-1-y-2-fase/calefaccion/l|/es/comprar/viviendas/jaen-capital/renfe-bulevar-1-y-2-fase/terraza/l", 
"/es/comprar/viviendas/el-molar-madrid/todas-las-zonas/calefaccion/l", 
"/es/comprar/viviendas/huercal-de-almeria/todas-las-zonas/terraza/l|/es/comprar/viviendas/huercal-de-almeria/todas-las-zonas/piscina/l", 
"", "/es/comprar/viviendas/oria/todas-las-zonas/terraza/l|/es/comprar/viviendas/oria/todas-las-zonas/piscina/l", 
"/es/comprar/viviendas/granada-capital/centro-sagrario/calefaccion/l|/es/comprar/viviendas/granada-capital/centro-sagrario/terraza/l|/es/comprar/viviendas/granada-capital/centro-sagrario/piscina/l", 
"/es/comprar/viviendas/finestrat/cala-de-finestrat/terraza/l", 
"/es/comprar/viviendas/andujar/todas-las-zonas/piscina/l", "/es/comprar/viviendas/collado-villalba/villalba-estacion/calefaccion/l|/es/comprar/viviendas/collado-villalba/villalba-estacion/terraza/l", 
"/es/comprar/viviendas/torrelavega/nueva-ciudad/calefaccion/l", 
"", "/es/comprar/viviendas/pamplona-iruna/chantrea/calefaccion/l", 
"", "", "", "/es/comprar/viviendas/aguilas/el-rubial/terraza/l|/es/comprar/viviendas/aguilas/el-rubial/piscina/l", 
"/es/comprar/viviendas/sondika/todas-las-zonas/calefaccion/l", 
"/es/comprar/viviendas/barcelona-capital/la-barceloneta/calefaccion/l", 
"/es/comprar/viviendas/albacete-capital/pedanias-extrarradio/calefaccion/l|/es/comprar/viviendas/albacete-capital/pedanias-extrarradio/terraza/l"
)), row.names = c(NA, -60L), class = c("tbl_df", "tbl", "data.frame"
))
解决方案

使用tidyverse工具链处理,步骤如下:

  1. 保留原始行号,用于后续聚合多观测结果;
  2. 将空字符串替换为NA,避免拆分报错;
  3. 按|拆分多观测为单独行;
  4. 按/拆分字符串层级,直接提取目标位置的内容;
  5. 按原始行号分组,将col3的多值用|拼接。

完整代码:

library(tidyverse)

# 保留原始行号
df_with_row <- df %>% mutate(original_row = row_number())

result <- df_with_row %>%
  # 空字符串转NA
  mutate(characteristicsMore = na_if(characteristicsMore, "")) %>%
  # 按|拆分多观测
  separate_rows(characteristicsMore, sep = "\\|") %>%
  # 按/拆分层级,直接提取目标列(忽略不需要的层级)
  separate(characteristicsMore, 
           into = c(NA, NA, NA, NA, "col1", "col2", "col3_part", NA),
           sep = "/", fill = "right") %>%
  # 按原始行聚合
  group_by(original_row) %>%
  summarise(
    col1 = first(col1) %||% "",
    col2 = first(col2) %||% "",
    col3 = ifelse(all(is.na(col3_part)), "", paste(na.omit(col3_part), collapse = "|"))
  ) %>%
  # 移除行号列
  select(-original_row)

# 查看前3行结果
print(head(result, 3))
运行结果

前3行输出如下:

# A tibble: 3 × 3
  col1            col2                       col3               
  <chr>           <chr>                      <chr>              
1 torrox          urbanizacion-santa-rosa    calefaccion|terraza|piscina
2 ""              ""                         ""                 
3 burgos-capital  san-pedro-y-san-felices    calefaccion        

内容的提问来源于stack exchange,提问作者user113156

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:55:52