gpt4 book ai didi

r - 使用 R 解析其中键和值是数值的类似字典的结构

转载 作者:行者123 更新时间:2023-12-05 08:50:47 26 4
gpt4 key购买 nike

我正在尝试解析我在旅途中遇到的一些奇怪的数据结构。本质上它们类似于 python 或 javascript 字典,但键和值都是数字:

weird <- "{47=4578.0005, 181=23456.7831, 216=7548.2367}"

为了将其转换为表格,我尝试将其转换为更典型的字典格式并使用 jsonlite 对其进行解析:

library(tidyverse)
library(jsonlite)
weird <- parse_json(str_replace(weird, "=", ":"))
#> Error: parse error: invalid object key (must be a string)

parse_json 函数正确地提示键不是字符串。我当然可以使用 str_split 剖析所有这些,但我希望善良的人可能对更优雅/紧凑的解决方案有一些洞察力(希望完全避免正则表达式),可以将其解析成一个表:

tibble::tribble(
~ key, ~ value,
47, 4578.0005,
181, 23456.7831,
216, 7548.2367
)
#> # A tibble: 3 x 2
#> key value
#> <dbl> <dbl>
#> 1 47 4578.
#> 2 181 23457.
#> 3 216 7548.

谢谢!

最佳答案

虽然你可能想要一个紧凑的、非正则表达式的版本,但对我来说这似乎是最容易理解和理解的:

library(stringr)
library(dplyr)

weird <- "{47=4578.0005, 181=23456.7831, 216=7548.2367}"

str_remove_all(weird, "[{}]") %>%
str_split(", ", simplify = TRUE) %>%
str_split("=", simplify = TRUE) %>%
as_tibble() %>%
mutate_all(as.numeric)

#> # A tibble: 3 x 2
#> V1 V2
#> <dbl> <dbl>
#> 1 47 4578.
#> 2 181 23457.
#> 3 216 7548.

reprex package (v0.3.0) 创建于 2020-04-20

我不介意对数据进行三遍处理,每一步只完成一件事。我发现它更容易阅读和推理。


更新:

虽然我仍然认为上面的版本是 R 惯用的方法,但它不是 R 惯用的数据结构,所以这是一个通过 {reticulate} 使用 Python 的解决方案。这比使用 {jsonlite} 的 JSON 解析器要复杂一些,但事实证明您可以使用数值作为 Python 字典中的键。

我们首先必须将 = 转换为 : 然后字符串变成一个有效的字典。然后我们可以启动一个 Python 上下文,运行一个字符串并将其分配给一个变量,然后将状态返回给 R。然后它只是将 R 中的列表转换为数据帧。

library(reticulate)
library(stringr)
library(glue)
library(tibble)

weird <- '{47=4578.0005, 181=23456.7831, 216=7548.2367}'

weird <- str_replace_all(weird, "=", ": ")

x <- py_run_string(
glue("weird_dict = {weird}"),
convert = T
)

x$weird_dict %>%
unlist() %>%
enframe()
#> # A tibble: 3 × 2
#> name value
#> <chr> <dbl>
#> 1 47 4578.
#> 2 181 23457.
#> 3 216 7548.

reprex package (v2.0.1) 创建于 2021-10-21

关于r - 使用 R 解析其中键和值是数值的类似字典的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61314767/

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