将字符串转换为列表并嵌套在data.table中

问题描述 投票:1回答:1

我试图将从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参数在这里特别有用,但它尚未实现。

任何解决方案将不胜感激!

r regex data.table nested-lists
1个回答
3
投票

是的,我认为它肯定会有点难看(注意我们必须使用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论证会自动处理这个......

© www.soinside.com 2019 - 2024. All rights reserved.