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

未知列名时将单列转换为多列的R语言实现方法

在R语言中将list()格式的文本列拆分为多列数据框

原始数据

data <- data.frame(col1 = c(
  "list(type = \"mac-addr\", spec_version = \"2.1\", id = \"mac-addr--PRIVATE_MAC_ID\", value = \"PRIVATE_MAC_ADDRESS\")",
  "list(type = \"indicator\", spec_version = \"2.1\", id = \"indicator--PRIVATE_INDICATOR_ID\", created_by_ref = \"identity--PRIVATE_CREATOR_ID\", created = \"PRIVATE_CREATED_TIME\", modified = \"PRIVATE_MODIFIED_TIME\", name = \"Malicious MAC Address\", description = \"Malicious MAC Address\", indicator_types = \"stix\", pattern = \"[mac-addr:value = 'PRIVATE_MAC_ADDRESS']\", pattern_type = \"stix\", pattern_version = \"2.1\", valid_from = \"PRIVATE_VALID_FROM\", lang = \"en\")")
)

需求说明

将col1列中包裹在list()内的键值对文本,去除list()结构后拆分转换为多列,缺失的键对应值用NA填充,最终得到符合预期的宽格式数据框。

解决方案

使用dplyr、tidyr和stringr包处理字符串并转换数据格式:

library(dplyr)
library(tidyr)
library(stringr)

# 处理字符串并转换为宽格式
result <- data %>%
  # 移除首尾的list()包裹
  mutate(col1 = str_remove_all(col1, "^list\\(|\\)$")) %>%
  # 将每个字符串拆分为键值对列表
  mutate(key_value = str_split(col1, ", ")) %>%
  # 展开列表为多行,每行一个键值对
  unnest(key_value) %>%
  # 拆分键和值,保留值中的空格内容
  separate(key_value, into = c("key", "value"), sep = " = ", extra = "merge") %>%
  # 移除值两侧的双引号
  mutate(value = str_remove_all(value, '^"|"$')) %>%
  # 转换为宽格式,缺失值自动填充NA
  pivot_wider(names_from = key, values_from = value)

# 查看结果
print(result)

# 若需输出为CSV格式(与预期格式一致)
write.csv(result, row.names = FALSE, na = "NA")

结果说明

运行上述代码后,result即为目标数据框,其中缺失的键会自动填充NA。执行write.csv后生成的文件内容与预期输出完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:05:30