【发布时间】:2021-10-23 06:36:07
【问题描述】:
我以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)]
但是,我得到了以下错误
[.data.table(df, ,:=(c("test"), tstrsplit(val, ",", fixed = TRUE))) : 提供 2 个项目分配给 3 个项目 “测试”列。如果您想“回收”RHS,请使用 rep() 来 让代码的读者清楚这一意图。
有人能指出我在这里做错了什么吗?提前致谢。
【问题讨论】:
-
这些实际上是
df$val中的字符串还是列表列? -
您不需要
fixed。你也应该将结果包装在一个列表中。即df[, .(test=tstrsplit(val, ',')), by = id] -
fixed即使不需要也可能更可取 -
是的,这些是
df$val中的字符串
标签: r data.table strsplit