1

我正在研究使用 XML 包基于 R 对象创建 XML 树。

我想做的一件事是从数据框中提取信息,如下所示:

frame2
rules     support confidence      lift
1      1 0.010230179  1.0000000 78.200000
2      2 0.010230179  0.8000000 78.200000
3      3 0.010230179  1.0000000 65.166667
4      4 0.010230179  0.6666667 65.166667
5      5 0.012787724  0.8333333 54.305556
6      6 0.012787724  0.8333333 54.305556
7      7 0.010230179  0.6666667 26.066667
8      8 0.010230179  0.4000000 26.066667
9      9 0.007672634  0.6000000 26.066667
10    10 0.007672634  0.3333333 26.066667
11    11 0.007672634  0.6000000 21.327273
12    12 0.007672634  0.2727273 21.327273
13    13 0.007672634  0.4285714 16.757143
14    14 0.007672634  0.3000000 16.757143
15    15 0.010230179  0.6666667 26.066667
16    16 0.010230179  0.4000000 26.066667
17    17 0.007672634  0.3333333 10.861111
18    18 0.007672634  0.2500000 10.861111
19    19 0.007672634  0.3750000 13.329545
20    20 0.007672634  0.2727273 13.329545
21    21 0.007672634  0.3750000 11.278846
22    22 0.007672634  0.2307692 11.278846
23    23 0.007672634  0.3750000 18.328125
24    24 0.007672634  0.3750000 18.328125
25    25 0.007672634  0.4285714 13.964286
26    26 0.007672634  0.2500000 13.964286
27    27 0.007672634  0.4285714 11.171429
28    28 0.007672634  0.2000000 11.171429
29    29 0.007672634  0.3000000 11.730000
30    30 0.007672634  0.3000000 11.730000
31    31 0.007672634  0.2727273  8.886364
32    32 0.007672634  0.2500000  8.886364
33    33 0.007672634  0.3333333 10.861111
34    34 0.007672634  0.2500000 10.861111
35    35 0.007672634  0.3000000 11.730000
36    36 0.007672634  0.3000000 11.730000
37    37 0.007672634  0.3000000  9.775000
38    38 0.007672634  0.2500000  9.775000
39    39 0.007672634  0.2727273  8.202797
40    40 0.007672634  0.2307692  8.202797
41    41 0.007672634  0.2307692  8.202797
42    42 0.007672634  0.2727273  8.202797
43    43 0.007672634  0.2307692  6.015385
44    44 0.007672634  0.2000000  6.015385
45    45 0.010230179  0.8000000 31.280000
46    46 0.010230179  1.0000000 65.166667
47    47 0.010230179  1.0000000 65.166667

进入 XML 树,如下所示

root
  1
   support=0.010230179
   confidence=1.0000000 
   lift=78.200000
  /1
  2 
   support=0.010230179
   confidence=0.8000000
   lift=78.200000
  /2
  47
   support=0.010230179
   confidence=1.0000000
   lift=65.166667
  /47
/root

到目前为止,我已经能够使用以下命令创建 47 个子节点。

root<-newXMLNode("root")
sapply(frame2$rules,newXMLNode,parent=root)

但是,我一直无法使用适当的值添加元素支持、信心和提升。

这导致我提出以下两个问题:

  1. 如何为 47 个子节点中的每一个定义元素或属性 support、confidence 和 lift?

  2. 如何根据 frame2 中的值填写它们各自的值?

非常感谢您。

4

1 回答 1

1

基本问题:

  • 您想逐行遍历您的数据帧。

apply那里是你的朋友:

> invisible(apply(df, MARGIN=1, print))
      rules     support  confidence        lift 
 1.00000000  0.01023018  1.00000000 78.20000000 
      rules     support  confidence        lift 
 2.00000000  0.01023018  0.80000000 78.20000000 
      rules     support  confidence        lift 
 3.00000000  0.01023018  1.00000000 65.16666700 
  • 您希望将这些行转换为 XML 元素(以 rules 属性命名),以及其他列的属性

newXMLNode有一个attrs参数,它采用命名向量来产生属性

> newXMLNode(as.character(df[1,"rules"]), attrs=df[1,])    
<1 rules="1" support="0.010230179" confidence="1" lift="78.2"/>

为了准确回答这个问题,我们还必须通过子集来摆脱你的rules属性,但这并不让我很高兴 -

> newXMLNode(as.character(df[1,"rules"]), attrs=df[1,-1])    
<1 support="0.010230179" confidence="1" lift="78.2"/>

我建议不要创建具有不可预测元素名称的 XML 模式(因为在接收者代码中通常更难解析/验证),最好像这样编码

> newXMLNode("observation", attrs=df[1,])    
<observation rule="1" support="0.010230179" confidence="1" lift="78.2"/>

结合以上两者并添加根节点:

> children <- apply(df, MARGIN=1, function(row) newXMLNode("observation", attrs=row))
> root <- newXMLNode("frame2", .children = children)

> root
<frame2>
  <observation rules="1" support="0.010230179" confidence="1" lift="78.2"/>
  <observation rules="2" support="0.010230179" confidence="0.8" lift="78.2"/>
  <observation rules="3" support="0.010230179" confidence="1" lift="65.166667"/>
</frame2> 
于 2012-08-20T16:27:17.723 回答