gpt4 book ai didi

performance - 使用 R 从 json 文件构建数据帧时,merge() 的有效替代方法?

转载 作者:行者123 更新时间:2023-12-04 20:22:18 24 4
gpt4 key购买 nike

我编写了以下有效的代码,但是一旦我开始在数千条记录上执行它,速度就会很慢:

require("RJSONIO")
people_data <- data.frame(person_id=numeric(0))

json_data <- fromJSON(json_file)
n_people <- length(json_data)
for(person in 1:n_people) {
person_dataframe <- as.data.frame(t(unlist(json_data[[person]])))
people_data <- merge(people_data, person_dataframe, all=TRUE)
}

output_file <- paste("people_data",".csv")
write.csv(people_data, file=output_file)

我试图从一系列 json 格式的文件构建一个统一的数据表。 fromJSON()函数以列表的形式读入数据。列表的每个元素都是一个人,然后包含该人的属性列表。

例如:
[[1]]
person_id
name
gender
hair_color
[[2]]
person_id
name
location
gender
height

[[...]]

structure(list(person_id = "Amy123", name = "Amy", gender = "F",
hair_color = "brown"),
.Names = c("person_id", "name", "gender", "hair_color"))

structure(list(person_id = "matt53", name = "Matt",
location = structure(c(47231, "IN"),
.Names = c("zip_code", "state")),
gender = "M", height = 172),
.Names = c("person_id", "name", "location", "gender", "height"))

上面代码的最终结果是矩阵,其中列是出现在上面结构中的每个人属性,行是每个人的相关值。正如你所看到的,有些人的一些数据丢失了,所以我需要确保这些数据显示为 NA并确保事情最终出现在正确的列中。此外, location本身是一个有两个分量的向量: statezip_code ,这意味着它需要被展平为 location.statelocation.zip_code在它可以与另一个人的记录合并之前;这是我用的 unlist()为了。然后我将正在运行的主表保存在 people_data 中.

上面的代码有效,但你知道一种更有效的方法来完成我想要做的事情吗?出现 merge()正在减缓这个爬行......我有数百个文件,每个文件中有数百人。

谢谢!
布莱恩

更新:
根据下面的反馈,我尝试构建一个所有人的列表,然后一次将其全部转换为一个数据框。我让它在一夜之间运行,但仍然没有完成制作数据框。名单中有大约 1/2 万人。该代码如下所示:
require("RJSONIO")
require("plyr")
people_data <- data.frame(person_id=numeric(0))
people_list <- list()

json_data <- fromJSON(json_file)
n_people <- length(json_data)
for(person in 1:n_people) {
people_list[[person]] <- t(unlist(json_data[[person]]))
}

#PROBLEM CODE, SLOW, 1/2 million records in people_list
people_data <- rbind.fill(lapply(people_list, as.data.frame))

output_file <- paste("people_data",".csv")
write.csv(people_data, file=output_file)

最佳答案

如果您不希望存在重复记录,可以使用 rbind.fill来自 plyr 包裹。

关于performance - 使用 R 从 json 文件构建数据帧时,merge() 的有效替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5185990/

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