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

如何使用separate()或cSplit()按|和:拆分单列键值对数据生成规范数据框

解决方案:拆分键值对为多列

这里用tidyverse的tidyr和dplyr包就能完美解决你的问题,全程不需要提前指定最终列数,自动识别所有出现过的键作为列名。

完整可运行代码

library(tidyr)
library(dplyr)

# 你的原始数据
data = structure(list(characteristicsAdditional = c("Tipo de inmueble:Piso|Estado:Bien|Antigüedad:30 a 50 años|Parking:Privado|Ascensor:Sí|Consumo energía:|Emisiones:",
"Tipo de inmueble:Piso|Orientación:Sureste|Estado:Muy bien|Antigüedad:30 a 50 años|Consumo energía:|Emisiones:",
"Tipo de inmueble:Apartamento|Orientación:Este|Estado:Bien|Antigüedad:30 a 50 años|Parking:Comunitario|Ascensor:Sí|Amueblado:Sí|Consumo energía:|Emisiones:",
"Tipo de inmueble:Casa o chalet|Orientación:Sur|Agua caliente:Gas Natural|Calefacción:Propano|Estado:Casi nuevo|Amueblado:Sí|Consumo energía:|Emisiones:",
"Tipo de inmueble:Casa o chalet|Parking:Privado|Amueblado:Sí|Consumo energía:|Emisiones:",
"Tipo de inmueble:Casa adosada|Estado:Casi nuevo|Antigüedad:10 a 20 años|Parking:Privado|Consumo energía:|Emisiones:"
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame" ))

# 核心处理流程
result <- data %>%
  # 1. 把|分隔的每个键值对拆成独立行
  separate_rows(characteristicsAdditional, sep = "\\|") %>%
  # 2. 按:拆分键和值,空值补在右侧
  separate(characteristicsAdditional, into = c("key", "value"), sep = ":", fill = "right") %>%
  # 3. 把空字符串转为NA(对应那些没有值的键,比如Consumo energía:)
  mutate(value = na_if(value, "")) %>%
  # 4. 转成宽格式,自动生成所有键对应的列
  pivot_wider(names_from = key, values_from = value)

print(result)

步骤详解

  1. separate_rows():把每一行的长字符串按|拆成多行,这样每个键值对单独占一行,避免了直接拆分列时的冗余问题。注意这里sep要用\\|,因为|是正则表达式的特殊字符,必须转义。
  2. separate():将每个键值对按:拆分为key(属性名)和value(属性值)两列,fill = "right"保证当键后面没有值时(比如Consumo energía:),value列会得到空字符串而不是抛出错误。
  3. na_if():把空字符串的value转为NA,和你预期输出里的缺失值格式保持一致。
  4. pivot_wider():把长格式数据重塑为宽格式,自动将所有出现过的key作为新列名,对应行的value填充单元格,缺失的属性自动补NA。

输出效果

运行后得到的结果完全符合你的预期,所有属性都成为独立列,每条原始记录对应一行,缺失的属性值显示为NA。

内容的提问来源于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 15:38:10