R中将XML文件转换为tibble数据框时出现列命名报错问题
问题原因
你调用collapse_obs()得到的是一个命名列表,列表的每个元素都是带列名的二维矩阵,存储了XML节点的属性和实际值。直接将整个列表转为tibble时,tibble无法自动识别矩阵内的列名规则,所以触发了要求指定列名修复规则的报错。
解决方法
你需要的赛事名称、车手姓名、车队名称等实际数据,都存在对应节点矩阵的XML_value列中,只需单独提取该列的向量值即可生成整洁tibble,修正后的代码如下:
pacman::p_load(pacman, tidyverse, XML2R) # 读取解析XML raw_data <- "http://ergast.com/api/f1/1954/results/1.xml" %>% XML2Obs() %>% collapse_obs() # 提取指定字段生成tibble result_tbl <- tibble( Race = raw_data[["MRData//RaceTable//Race//RaceName"]][, "XML_value"], FirstName = raw_data[["MRData//RaceTable//Race//ResultsList//Result//Driver//GivenName"]][, "XML_value"], LastName = raw_data[["MRData//RaceTable//Race//ResultsList//Result//Driver//FamilyName"]][, "XML_value"], Team = raw_data[["MRData//RaceTable//Race//ResultsList//Result//Constructor//Name"]][, "XML_value"] ) # 查看结果 print(result_tbl)
运行后会得到1954年每站F1比赛冠军对应的赛事名称、姓名、所属车队的整洁表格,不会再触发列名报错。
内容的提问来源于stack exchange,提问作者Chao Jiang
相关产品推荐
相关产品推荐

