从data.table

时间:2018-07-11 13:24:45

标签: r json performance data.table

我们在data.table中有一个json,我们需要从其列中提取并将它们的值放入列中。

json如下所示:

# 13B = index, 
# 132 = value
# s = column with value 6.48, i = column with value 0
# {
#   "13B": [132, {"s": 6.48} ],
#   "12B": [660, {}],
#   "15B": [-1, {"i": 0, "v": 0}]
# }

用于生成测试数据集的代码,当然每个索引中json内的值不同:

library(data.table)
library(jsonlite)
library(purrr)
df <- iris[1:5, c(1,5)]
dt <- as.data.table(df)
dt$Sepal.Length <- c(1,2,3,4,5)
df$Jason <-  '{"13B":[132,{"s":6.48}],"12B":[660,{}],"15B":[-1,{"i":0,"v":0}]}'
dt$Jason[3] <- "{\"13B\":[132,{\"s\":1.46}],\"12B\":[987,{}],\"18E\":[12,{\"i\":0,\"v\":8}]}"


#> dt
#   Sepal.Length Species                                                            Jason
#1:            1  setosa {"13B":[132,{"s":6.48}],"12B":[660,{}],"15B":[-1,{"i":0,"v":0}]}
#2:            2  setosa {"13B":[132,{"s":6.48}],"12B":[660,{}],"15B":[-1,{"i":0,"v":0}]}
#3:            3  setosa {"13B":[132,{"s":1.46}],"12B":[987,{}],"18E":[12,{"i":0,"v":8}]}
#4:            4  setosa {"13B":[132,{"s":6.48}],"12B":[660,{}],"15B":[-1,{"i":0,"v":0}]}
#5:            5  setosa {"13B":[132,{"s":6.48}],"12B":[660,{}],"15B":[-1,{"i":0,"v":0}]}

我们已经用一个很慢的for循环运行了这个项目。我们最终将在表中拥有数百万行,因此速度非常重要。

我有一次循环遍历我们的数据集的想法,并将json的值分配给新列中的预定义data.table,此后我们可以将数据转换为所需的格式。但是我相信data.table中必须有更快的选项,我现在想不起来。

最终的dt应该看起来像这样:

enter image description here

在data.table中将json(嵌套在data.table中)提取到不同值的列中最快的方法是什么?

0 个答案:

没有答案