在R中将JSON转换为DataFrame时出现行数量不匹配错误求助
问题解决:Twelve Data API转Data Frame时的行数不匹配错误
修正后的代码
步骤1:获取并解析JSON数据
library(rjson) # 先解析JSON为R列表,不直接转成data.frame earnings_json <- rjson::fromJSON( file = paste( "https://api.twelvedata.com/earnings?symbol=", "AAPL", "&outputsize=1&apikey=", twelve_data_api, sep = "" ) )
步骤2:提取核心收益数据
直接提取JSON中的earnings数组部分转成data.frame,这部分是核心业务数据:
earnings_pull <- as.data.frame(earnings_json$earnings)
可选:合并元数据(meta)
如果需要把接口返回的股票基础信息(如代码、交易所)添加到结果中,可将meta转为单一行数据后合并:
# 将meta转为单一行的data.frame meta_df <- as.data.frame(earnings_json$meta) # 合并收益数据与元数据 earnings_pull <- cbind(earnings_pull, meta_df)
报错原因
原代码直接将整个JSON解析后的列表转为data.frame,触发错误的核心逻辑:
- JSON顶级元素结构不统一:
meta是单条键值对集合(每个字段对应1个值),earnings是包含单条记录的数组,但其中部分字段(如eps_estimate)为null,rjson会将其转为R中的NULL as.data.frame处理包含NULL的列表时,会将NULL对应的列视为0行,而其他列(如meta中的字段)为1行,导致行数不匹配,抛出arguments imply differing number of rows: 1, 0错误
内容的提问来源于stack exchange,提问作者DougC
相关产品推荐
相关产品推荐

