gpt4 book ai didi

r - 快速将多行转换为 json 字符

转载 作者:行者123 更新时间:2023-12-02 12:32:46 25 4
gpt4 key购买 nike

我有大约 15 个 data.frame,其中包含 100K-300K 行。出于压缩存储的原因,我想将变量 v 其他列压缩为字符 json 格式。请注意,v 中的每个组都将有多行(1 或更多;可能更多)。我下面的代码低效地使用 jsonlite 包进行转换,但由于我设置分割的方式,它很慢并且内存效率不高。我怎样才能更快、更高效地做到这一点?我不需要使用刚刚所做的 jsonlite 包,因为这是我知道如何做到这一点的唯一方法。我认为有一种方法可以快速地直接使用 data.table 来制作字符 json,但不知道如何做到这一点。

PS 如果它有助于了解动机...我这样做是为了拥有一个可以查找的哈希表v in,然后将 json 即时转换回 R data.frame。也许有一种方法可以比我更直接地使用 jsonlite,但 toJSON(dat) 不是我想要的。

MWE

set.seed(10)

dat <- data.frame(
v = rep(c('red', 'blue'), each =3),
w = sample(LETTERS, 6),
x = sample(1:3, 6, T),
y = sample(1:3, 6, T),
z = sample(1:3, 6, T),
stringsAsFactors = FALSE
)

dat

数据 View

     v w x y z
1 red N 1 1 2
2 red H 1 2 3
3 red K 2 2 3
4 blue P 2 2 2
5 blue B 2 1 3
6 blue E 2 1 2

隐蔽

library(jsonlite)
jsonlist <- lapply(split(dat[-1], dat$v), function(x) as.character(toJSON(x)))

data.frame(
v = names(jsonlist),
json = unlist(jsonlist, use.names=FALSE),
stringsAsFactors = FALSE
)

期望的结果

      v                                                                                  json
1 blue [{"w":"P","x":2,"y":2,"z":2},{"w":"B","x":2,"y":1,"z":3},{"w":"E","x":2,"y":1,"z":2}]
2 red [{"w":"N","x":1,"y":1,"z":2},{"w":"H","x":1,"y":2,"z":3},{"w":"K","x":2,"y":2,"z":3}]

最佳答案

使用 data.table,您可以按 v 分组并将 .SD 传递给 toJSON:

library(data.table)
setDT(dat)
dat[, toJSON(.SD), by = v]
# v V1
#1: red [{"w":"N","x":1,"y":1,"z":2},{"w":"H","x":1,"y":2,"z":3},{"w":"K","x":2,"y":2,"z":3}]
#2: blue [{"w":"P","x":2,"y":2,"z":2},{"w":"B","x":2,"y":1,"z":3},{"w":"E","x":2,"y":1,"z":2}]

关于r - 快速将多行转换为 json 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35960053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com