如果其他功能在将XML文件读入数据帧时起混合内容的作用

时间:2019-01-23 15:57:46

标签: r xml

我需要将2000个XML文件中的数据读出到R中的一个数据帧中。到目前为止,我已使用xpath函数解决了该问题,因为我不需要文件中的所有信息。现在的问题是,不是每个文件都包含相同的节点,因此有时我需要获取文件的内容,并且当没有这样的节点时,我想要一个不适用的文件。

我的解决方案现在是(因为我是R的初学者,并且仅了解Basics)可以使用ifelse函数,这意味着我检查xpath长度的条件是否存在一个具有该名称的节点,以及是否存在第一,我想获取内容,否则,我想要NA。这有效,但是一旦我包含了3个以上的文件,最多只能包含3个文件。NA仍然可以正确放置,但是当存在一个具有该名称的节点时,内容的确会混淆,并且不会写在正确的IK旁边在表中

filenames<-list.files('~/R/', pattern = '.xml', full.names = TRUE)

IK <- unlist(lapply(filenames, function(f) {  
  xml <- xmlParse(f)  
  xpathSApply(xml, "//Qualitaetsbericht/Krankenhaus/Kontaktdaten/IK", xmlValue)
}))

QM_Tagungsfrequenz <- ifelse ((unlist(lapply(filenames, function(f) {
  xml <- xmlParse(f)
  length(xpathSApply(xml, "//Qualitaetsbericht/Umgang_mit_Risiken_in_der_Patientenversorgung/Lenkungsgremium_Qualitaetsmanagement/Lenkungsgremium/Tagungsfrequenz", xmlValue))
})))>=1 , 
unlist(lapply(filenames, function(f) { 
  xml <- xmlParse(f)
  xpathSApply(xml, "//Qualitaetsbericht/Umgang_mit_Risiken_in_der_Patientenversorgung/Lenkungsgremium_Qualitaetsmanagement/Lenkungsgremium/Tagungsfrequenz", xmlValue)
}
)) , NA)


Test<-data.frame(IK,QM_Tagungsfrequenz)

数据

我正在使用的文件的示例(实际文件更大):

Example 1:
<Qualitaetsbericht>
   <Krankenhaus>
      <Kontaktdaten>
           <IK>123456</IK> 
      </Kontaktdaten>
   </Krankenhaus>
   <Umgang_mit_Risiken_in_der_Patientenversorgung>
      <Lenkungsgremium_Qualitaetsmanagement>
         <Lenkungsgremium>
            <Tagungsfrequenz>halbjährlich</Tagungsfrequenz> 
         </Lenkungsgremium>
      </Lenkungsgremium_Qualitaetsmanagement>
   </Umgang_mit_Risiken_in_der_Patientenversorgung>  
</Qualitaetsbericht>

Example 2:
<Qualitaetsbericht>
   <Krankenhaus>
      <Kontaktdaten>
           <IK>654321</IK> 
      </Kontaktdaten>
   </Krankenhaus>
   <Umgang_mit_Risiken_in_der_Patientenversorgung>
      <Lenkungsgremium_Qualitaetsmanagement>
         <Lenkungsgremium>
         </Lenkungsgremium>
      </Lenkungsgremium_Qualitaetsmanagement>
   </Umgang_mit_Risiken_in_der_Patientenversorgung>  
</Qualitaetsbericht>

输出

    IK           QM_Tagungsfrequenz    
    <chr>        <chr>      
1   123456       halbjährlich
2   654321       NA

问题

这是我希望为每个函数提供的确切输出,但是正如我提到的那样,当它们只有4个数据文件时,对于每个不是NA的列,“ QM_Tagungsfrequenz”将是错误的。

0 个答案:

没有答案