R data.table-如何爆炸嵌套数组?

时间:2018-11-21 06:21:39

标签: 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等),但没有任何效果。 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

希望这对您的数据有用:

> 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}]可能会失败。

答案 1 :(得分:0)

有点笨拙,但一步一步似乎可以正常工作。

s1 <- sub("\\[\\{", "\\{", df$col)
s2 <- unlist(strsplit(s1, "\\}, \\{", perl=TRUE))
s2[2] <- sub("\\}\\]\\}\\]", "\\}\\]\\}", s2[2])
s2[1] <- paste0(s2[1], "}", collapse="")
s2[2] <- paste0("{", s2[2], collapse="")


> data.table(col=s2, group=df$group)
                                  col group
1: {a1=1, b1=2, c1=ABC, e1=[{f1=12}]}     1
2: {a2=5, b2=3, c2=DEF, e2=[{f2=15}]}     1