You could try cSplit
from my “splitstackshape” package:
library(splitstackshape)
cSplit(as.data.table(mydf)[, col2 := gsub("[][\"]", "", col2)],
"col2", ",", "long")
# col1 col2
# 1: a 1
# 2: a 2
# 3: a 3
# 4: b 1
# 5: b 2
# 6: c 4
Of course, I’m highly partial to cSplit
, but you can also use “dplyr” and unnest
from “tidyr”:
library(dplyr)
library(tidyr)
mydf %>%
mutate(col2 = strsplit(gsub("[][\"]", "", col2), ",")) %>%
unnest(col2)
Or just with “data.table”:
library(data.table)
as.data.table(mydf)[, list(
col2 = unlist(strsplit(gsub("[][\"]", "", col2), ","))),
by = col1]