首页 > 解决方案 > 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 等),但没有任何效果如我所愿。有人可以帮忙吗?

标签: rdata.table

解决方案


希望这适用于您的数据:

> 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}]


推荐阅读