bro*_*oli 1 r strsplit data.table
我以以下data.table为例
df = data.table(id = c(1, 2, 3), val=c("['hello', 'world']", "['hi']", "['so', 'there']"))
Run Code Online (Sandbox Code Playgroud)
我想将像对象一样的列表拆分为id重复的单独行。所以data.table我想要的预期如下
df2 = data.table(id = c(1, 1, 2, 3, 3), val=c("hello", "world", "hi", "so", "there"))
Run Code Online (Sandbox Code Playgroud)
我尝试了以下
df[, c("test") := tstrsplit(val, ",", fixed=TRUE)]
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误
误差在
[.data.table(DF,:=(C( “测试”),tstrsplit(VAL, “”,固定= TRUE))):提供的2项被分配给3个项目栏'测试'的。如果您希望“回收” RHS,请使用 rep() 向您的代码读者明确说明这一意图。
有人可以指出我在这里做错了什么吗?提前致谢。
从您拥有的数据结构来看,您似乎拥有一个 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
Run Code Online (Sandbox Code Playgroud)
你可以直接这样做:
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
Run Code Online (Sandbox Code Playgroud)