R удаление дубликатов братьев и сестер в данных XML - PullRequest
0 голосов
/ 22 ноября 2018

Я работаю над ошибками. Набор данных XML:

 `</short_desc>     
  <report id="322231">
<update>
  <when>1136281841</when>
  <what>When uploading a objectice-c++ file (.mm) bugzilla sets the MIME type as application/octet-stream</what>
</update>
<update>
  <when>1136420901</when>
  <what>When uploading a objective-c++ file (.mm) bugzilla sets the MIME type as application/octet-stream</what>
</update>
 </report>
</short_desc> `

Я создаю фрейм данных из данных XML выше, сохраняя только данные узлов <when> и <what>.Из-за дублирования содержимого в узле <what>.Я хочу сохранить только последний узел (самый последний), если содержимое узла <what> в обоих <update> одинаково.Предполагалось, что его сравнивают с использованием косинусного сходства в R. Если данные в узле <what> отличаются, то я хочу сохранить оба в создаваемом фрейме данных.Пожалуйста, предложите, бывают случаи, когда в одном <report> имеется более двух обновлений и они имеют примерно одинаковый текст.

1 Ответ

0 голосов
/ 23 ноября 2018

попробуйте следующее ...

library(xml2)

пример данных

doc <- read_xml( '<report id="322231">
<update>
                 <when>1136281841</when>
                 <what>When uploading a objective-c++ file (.mm) bugzilla sets the MIME type as application/octet-stream</what>
                 </update>
                 <update>
                 <when>1136420901</when>
                 <what>When uploading a objective-c++ file (.mm) bugzilla sets the MIME type as application/octet-stream</what>
                 </update>
                 </report>')

код

#create nodeset with all 'what'-nodes
what.nodes <- xml_find_all( doc, ".//what" )

#no make a data.frame
df <- data.frame( 
  #get report-attribute "id" by retracing the ancestor tree from the what.nodes
  report_id = xml_attr( xml_find_first( what.nodes, ".//ancestor::report" ), "id" ),
  #get the sibling 'when'  fro the what-node
  when = xml_text( xml_find_first( what.nodes, ".//preceding-sibling::when" ) ),
  #get 'what'
  what = xml_text( what.nodes ),
  #set stringsAsfactors
  stringsAsFactors = FALSE )

#get rows with unique values from the bottom-up
df[ !duplicated( df$what, fromLast = TRUE ), ]

выход

#   report_id       when                                                                                              what
# 2    322231 1136420901 When uploading a objective-c++ file (.mm) bugzilla sets the MIME type as application/octet-stream
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...