我想爆炸包含包含嵌套数组的字符串的列。
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等),但没有任何效果。 有人可以帮忙吗?
答案 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