将字符串转换为列表并嵌套在data.table中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将字符串转换为列表并嵌套在data.table中相关的知识,希望对你有一定的参考价值。
我试图将从python导入的丑陋字符串强制转换为可以占用data.table中的单元格的列表。
为了更清楚,我目前有一个.tsv有一些看起来像这样的行:
1 2 [1, 2, 3, 4] 4
当我通过fread
导入它时,我最终得到了第三个元素的字符串(即dt[1,3] = "[1, 2, 3, 4]"
)。
我目前的解决方案是将这些项目转换为带有正则表达式的列表。例如:
dt[, newList := .(list(as.numeric(unlist(strsplit(gsub("\[|\]","", 3),",")))))]
但我发现这非常难看并且不满意。
有更优雅的方式吗?理想情况下,我也会替换原始变量,由于不同的列类,这个变量目前无法通过引用实现。
或者,有没有更好的方法我可以导出.csv或.tsv与python的嵌套列表,这将允许更好地读入R?
似乎sep2
data.table参数在这里特别有用,但它尚未实现。
任何解决方案将不胜感激!
答案
是的,我认为它肯定会有点难看(注意我们必须使用as.list
来表示:=
正在发生列类型更改):
DT = data.table(a = 1, b = 2, c = '[1, 2, 3, 4]', d = 4)
DT[ , c := as.list(lapply(
strsplit(gsub('[][]', '', c), ',', fixed = TRUE),
as.integer))]
不幸的是,您的示例太小,因为您不清楚您想要为多行输入表做什么。
迟早,fread
will support a sep2
论证会自动处理这个......
以上是关于将字符串转换为列表并嵌套在data.table中的主要内容,如果未能解决你的问题,请参考以下文章