r - R data.table - 如何分解嵌套数组?
问题描述
我想分解一个包含嵌套数组的字符串的列。
require(data.table)
# Starting dataframe
df = structure(list(col = "[{a1=1, b1=2, c1=ABC, e1=[{f1=12}]}, {a2=5, b2=3, c2=DEF, e2=[{f2=15}]}]",
group = 1), .Names = c("col", "group"), class = c("data.table",
"data.frame"), row.names = c(NA, -1L))
df
col group
1: [{a1=1, b1=2, c1=ABC, e1=[{f1=12}]}, {a2=5, b2=3, c2=DEF, e2=[{f2=15}]} 1
# result expected
col group
1: {a1=1, b1=2, c1=ABC, e1=[{f1=12]} 1
2: {a2=5, b2=3, c2=DEF, e2=[{f2=15]} 1
我尝试了一些东西(str_locate 等),但没有任何效果如我所愿。有人可以帮忙吗?
解决方案
希望这适用于您的数据:
> df[, .(col = strsplit(gsub('^\\[|\\]$', '', col), '(?<=}), ', perl = T)[[1]]), by = .(group)]
# group col
# 1: 1 {a1=1, b1=2, c1=ABC, e1=[{f1=12}]}
# 2: 1 {a2=5, b2=3, c2=DEF, e2=[{f2=15}]}
这个解决方案并不健壮,并且在更复杂的情况下可能会失败,例如e1=[{f1=12}, {f2=23}]
。
推荐阅读
- html - div的位置不正确
- python - INSERT 函数不抛出错误,仍然不更新数据库表
- packagist - 我如何将packagist 文件用于我的控制器?
- python - super() 和更改合作方法的签名
- multithreading - 使用 MPI/OpenMP 混合编程的奇怪问题。并行区域中的 OpenMP 线程数始终为 1
- javascript - 如何在 console.log 中返回 AM/PM 的值
- mysql - node js中出现奇怪的问题(交换请求)
- gcc - 使用 GCC 创建的可执行文件是否包含可识别的元数据?
- c# - 如何将 xml 从 Google Cloud Storage 下载到 XDocument
- javascript - 引导 jquery modal 中的 $("#my-modal").modal('toggle') 和 $("#my-modal").modal('show') 有什么区别?