如何在R中展开数据框内的JSON字符串格式交易记录?
解决方法:将字符串格式的交易记录展开为标准DataFrame
你的核心问题是transactionHistory列是单引号格式的类JSON字符串,不符合标准JSON的双引号要求,无法直接解析。可以通过「格式转换→JSON解析→行展开」三步处理,用R的tidyverse工具链实现:
步骤1:加载所需包
library(dplyr) library(tidyr) library(jsonlite)
步骤2:完整处理代码
假设你的原始数据框名为df,执行以下代码:
df_processed <- df %>% # 替换单引号为双引号,适配JSON解析规则 mutate(transactionHistory = stringr::str_replace_all(transactionHistory, "'", "\"")) %>% # 将每个字符串解析为交易列表 mutate(transaction_details = purrr::map(transactionHistory, ~jsonlite::fromJSON(.x))) %>% # 把列表中的每一条交易拆分为单独行 unnest(transaction_details) %>% # 移除原始的字符串列(可选) select(-transactionHistory) %>% # 可选:将金额转换为数值类型(去掉$符号) mutate(transactionAmount = as.numeric(stringr::str_remove(transactionAmount, "\\$")))
代码说明
- 单引号替换:标准JSON要求键和值用双引号,所以先把所有
'替换为",让字符串符合JSON格式。 - JSON解析:用
map+fromJSON把每个单元格的字符串转换成包含多个交易的列表。 - 行展开:
unnest会把列表中的每一条交易记录拆成单独的行,和对应的customerId一一对应。 - 金额转换:可选步骤,把带$的字符串转成数值型,方便后续分析。
处理后你会得到一个标准结构的DataFrame,每一行对应一条交易记录,包含customerId、transactionId、date、status、transactionAmount等字段。
内容的提问来源于stack exchange,提问作者Jorge Hernández
相关产品推荐
相关产品推荐

