Я использую пакет xml2 для преобразования файла XML в CSV. XML, с которым я имею дело, имеет следующую структуру - обратите внимание, что <businessAddress>
появляется только в двух из <business>
узлов.
<businesses>
<business>
<businessName>...</businessName>
<businessAddress>...</businessAddress>
<businessPostcode>...</businessPostcode>
</business>
<business>
<businessName>...</businessName>
<businessAddress>...</businessAddress>
<businessPostcode>...</businessPostcode>
</business>
<business>
<businessName>...</businessName>
<businessPostcode>...</businessPostcode>
</business>
</businesses>
Мой R выглядит так:
data <- read_xml("/path/to/the/xml")
businessName_nodes <- xml_find_all(data, "//businessName")
businessName <- xml_text(businessName_nodes)
businessAddress_nodes <- xml_find_all(data, "//businessAddress")
businessAddress <- xml_text(businessAddress_nodes)
businessPostcode_nodes <- xml_find_all(data, "//businessPostcode")
businessPostcode <- xml_text(businessPostcode_nodes)
framedData = data.frame(
businessName,
businessAddress,
businessPostcode,
stringsAsFactors = FALSE)
write.csv(framedData, file = csvName)
Это дает мне ошибку Error in data.frame... arguments imply differing number of rows
, потому что не каждый <business>
содержит <businessAddress>
.
Мой вопрос заключается в том, как решить эту проблему, чтобы я мог получить кадр, в котором, когда отсутствует <businessAddress>
, создается нулевое значение
"", "businessName", "businessAddress", "businessPostcode"
9123, "Bob Smith", NA, "M1R 0E9"
Или если нет, то строка в кадре данных вообще не создается.
Новичок в R, так что оцените помощь