gpt4 book ai didi

r - 有没有办法从 JSON 列中有效地提取多个属性?

转载 作者:行者123 更新时间:2023-12-04 10:56:37 25 4
gpt4 key购买 nike

我有一个数据框,其中有一列包含 json 数据。我想从这个 json 数据中提取一些属性到数据框的命名列中。

样本数据

json_col = c('{"name":"john"}','{"name":"doe","points": 10}', '{"name":"jane", "points": 20}')
id = c(1,2,3)
df <- data.frame(id, json_col)

我能够使用
library(tidyverse)
library(jsonlite)

extract_json_attr <- function(from, attr, default=NA) {
value <- from %>%
as.character() %>%
jsonlite::fromJSON(txt = .) %>%
.[attr]

return(ifelse(is.null(value[[1]]), default, value[[1]]))
}

df <- df %>%
rowwise() %>%
mutate(name = extract_json_attr(json_col, "name"),
points = extract_json_attr(json_col, "points", 0))

在这种情况下, extract_json_attr对于要提取的每个属性,需要多次解析 json 列。

有没有更好的方法一次性提取所有属性?

我尝试使用此函数将多个值作为列表返回,但我无法将它与 mutate 一起使用来设置多个列。
extract_multiple <- function(from, attributes){
values <- from %>%
as.character() %>%
jsonlite::fromJSON(txt = .) %>%
.[attributes]
return (values)
}

我能够使用此功能提取所需的值
extract_multiple(df$json_col[1],c('name','points'))
extract_multiple(df$json_col[2],c('name','points'))

但不能将其应用于一次设置多个列。有没有更好的方法来有效地做到这一点?

最佳答案

这是使用 bind_rows 的一种方法来自 dplyr

dplyr::bind_rows(lapply(as.character(df$json_col), jsonlite::fromJSON))

# A tibble: 3 x 2
# name points
# <chr> <int>
#1 john NA
#2 doe 10
#3 jane 20

从函数中子集特定属性,我们可以做
bind_rows(lapply(as.character(df$json_col), function(x) 
jsonlite::fromJSON(x)[c('name', 'points')]))

关于r - 有没有办法从 JSON 列中有效地提取多个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59133043/

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