我们在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应该看起来像这样:
在data.table中将json(嵌套在data.table中)提取到不同值的列中最快的方法是什么?