加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将xml“rows”加载到R数据表中

发布时间:2020-12-16 05:33:34 所属栏目:百科 来源:网络整理
导读:我有一些形状像这样的数据: people person first="Mary" last="Jane" sex="F" / person first="Susan" last="Smith" sex="F" height="168" / person last="Black" first="Joseph" sex="M" / person first="Jessica" last="Jones" sex="F" //people 我想要一
我有一些形状像这样的数据:
<people>
  <person first="Mary" last="Jane" sex="F" />
  <person first="Susan" last="Smith" sex="F" height="168" />
  <person last="Black" first="Joseph" sex="M" />
  <person first="Jessica" last="Jones" sex="F" />
</people>

我想要一个如下所示的数据框:

first  last sex height
1    Mary  Jane   F     NA
2   Susan Smith   F    168
3  Joseph Black   M     NA
4 Jessica Jones   F     NA

我到目前为止:

library(XML)
xpeople <- xmlRoot(xmlParse(xml))
lst <- xmlApply(xpeople,xmlAttrs)
names(lst) <- 1:length(lst)

但我不能为我的生活弄清楚如何将列表放入数据框.我可以将列表设置为“正方形”(即填充间隙),然后将其放入数据框中:

lst <- xmlApply(xpeople,function(node) {
  attrs = xmlAttrs(node)
  if (!("height" %in% names(attrs))) {
    attrs[["height"]] <- NA
  }
  attrs
})
df = as.data.frame(lst)

但是我有以下问题:

>数据框被转置
>第一个和最后一个是因素,而不是chr
> height是一个因子,而不是数字
>为约瑟夫·布莱克交换了名字和姓氏(这不是一个大问题,因为我的数据通常是一致的,但仍然令人讨厌)

如何以正确的形式获取数据框?

txt <- '<people>
          <person first="Mary" last="Jane" sex="F" />
          <person first="Susan" last="Smith" sex="F" height="168" />
          <person last="Black" first="Joseph" sex="M" />
          <person first="Jessica" last="Jones" sex="F" />
        </people>'
library(XML)         # for xmlTreeParse
library(data.table)  # for rbindlist(...)
xml <- xmlTreeParse(txt,asText=TRUE,useInternalNodes = TRUE)
rbindlist(lapply(xml["//person"],function(x)as.list(xmlAttrs(x))),fill=TRUE)
#      first  last sex height
# 1:    Mary  Jane   F     NA
# 2:   Susan Smith   F    168
# 3:  Joseph Black   M     NA
# 4: Jessica Jones   F     NA

你需要as.list(xmlAttrs(…))而不仅仅是xmlAttrs(…),因为rbindlist(…)希望每个参数都是一个列表,而不是一个向量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读