如何从字符串提取带标签数字?以R语言JSON格式价格向量为例
嘿,我来帮你搞定这个从JSON字符串向量里提取对应货币价格的问题!在R里处理这种格式的数据其实有挺多便捷的方法,下面给你详细拆解两种常用方案:
方法一:用
jsonlite包快速解析(最直接) jsonlite是R里处理JSON数据的标配工具,解析单个JSON字符串特别顺手。我们可以遍历向量里的每个元素,把它们逐个解析后合并成数据框:
首先如果还没装包,先安装:
install.packages("jsonlite")
然后加载包并处理数据:
library(jsonlite) # 你的原始数据向量 X <- c( "{\"eur\": 4900, \"gbp\": 4250, \"usd\": 6120}", "{\"gbp\": 730, \"usd\": 1050}", "{\"eur\": 1050, \"gbp\": 910, \"usd\": 1310}", "{\"eur\": 400, \"gbp\": 350, \"usd\": 500}" ) # 解析每个JSON字符串并合并成数据框 price_df <- do.call(rbind, lapply(X, function(x) as.data.frame(fromJSON(x))))
运行后你会得到一个包含eur、gbp、usd三列的数据框,缺失的货币值(比如第二个元素里的eur)会自动填充为NA,完全符合数据框的规范结构。
方法二:结合
tidyverse工具链(适合数据管道流) 如果你平时习惯用dplyr和purrr这类tidyverse工具,用管道流处理会更流畅:
先加载所需包:
install.packages("tidyverse") library(tidyverse) library(jsonlite)
然后用管道一步到位:
price_df <- tibble(json_str = X) %>% # 把每个JSON字符串解析成迷你tibble mutate(data = map(json_str, ~fromJSON(.) %>% as_tibble())) %>% # 把嵌套的tibble展开成列 unnest(data)
这个方法的好处是代码可读性更强,后续如果要加筛选、转换等操作,可以直接在管道里继续添加步骤,非常灵活。
额外小技巧:提取特定货币
如果你不需要所有货币,只想提取某几个(比如只需要eur和usd),可以在解析后加上筛选步骤:
# 用基础R的方式 price_df <- do.call(rbind, lapply(X, function(x) { json_data <- fromJSON(x) # 只保留eur和usd键对应的数据 as.data.frame(json_data[c("eur", "usd")]) })) # 用tidyverse的方式 price_df <- tibble(json_str = X) %>% mutate(data = map(json_str, ~fromJSON(.) %>% as_tibble() %>% select(eur, usd))) %>% unnest(data)
这样就能精准得到你需要的货币价格数据啦!
内容的提问来源于stack exchange,提问作者Margot
相关产品推荐
相关产品推荐

