将字符串转换为列表并嵌套在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中的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用混合类型将嵌套列表中的字符数字转换为数字

如何使用 PHP 将日期数组转换为 3 级嵌套列表

Pyspark 将列表列转换为嵌套结构列

如何将深度嵌套的列表转换为字符串

将带有嵌套列表的列表转换为带有嵌套数据框的单行小标题

Flatten嵌套字典-将列表元素转换为字符串