R data.table 使用 tstrsplit 分解列
我以以下data.table为例
df = data.table(id = c(1, 2, 3), val=c("['hello', 'world']", "['hi']", "['so', 'there']"))
我想将像对象一样的列表拆分为id重复的单独行。所以data.table我想要的预期如下
df2 = data.table(id = c(1, 1, 2, 3, 3), val=c("hello", "world", "hi", "so", "there"))
我尝试了以下
df[, c("test") := tstrsplit(val, ",", fixed=TRUE)]
但是,我收到以下错误
有人可以指出我在这里做错了什么吗?提前致谢。
回答
从您拥有的数据结构来看,您似乎拥有一个 python 数据集。您可以reticulate为此使用:
library(reticulate)
ast <- import('ast')
df_python <- r_to_py(df)
df_python$assign(val = df_python$val$transform(ast$literal_eval))$explode('val')
id val
0 1.0 hello
0 1.0 world
1 2.0 hi
2 3.0 so
2 3.0 there
你可以直接这样做:
df[, .(val = tstrsplit(gsub('[^a-z,]', '',val), ',')), by = 'id']
id val
1: 1 hello
2: 1 world
3: 2 hi
4: 3 so
5: 3 there