Получить данные из XML в dataframe (некоторые поля отсутствуют в элементе / узле) необходимо установить значения по умолчанию NA - PullRequest
0 голосов
/ 29 марта 2019

Я довольно новичок в R, и я изо всех сил пытаюсь получить данные в фрейм данных из XML, стандарт в порядке, но некоторые поля отсутствуют, поэтому мне нужно сделать некоторую итерацию, чтобы получить NA в случае отсутствия поля (узел).В моем примере есть активы, и у каждого есть информация, касающаяся SecurityCodes, но в некоторых активах отсутствует информация, такая как InterestClaimGross ...

            <Portfolio>
                <Assets>
                    <SecurityCodes>
                        <ISIN>XS1300502041</ISIN>
                    </SecurityCodes>
                    <Currency>EUR</Currency>
                    <NominalOrUnits>2000000</NominalOrUnits>
                    <ExchangeRate>1</ExchangeRate>
                    <Price>107.233</Price>
                    <MarketValue>
                        <Amount>2144660</Amount>
                        <AmountForeign>2144660</AmountForeign>
                        <AmountCurrency>
                            <Currency>EUR</Currency>
                            <Amount>2144660</Amount>
                        </AmountCurrency>
                    </MarketValue>
                    <InterestClaimGross>
                        <Amount>34027.4</Amount>
                        <AmountForeign>34027.4</AmountForeign>
                        <AmountCurrency>
                            <Currency>EUR</Currency>
                            <Amount>34027.4</Amount>
                        </AmountCurrency>
                    </InterestClaimGross>

                </Assets>
                 <Assets>
                    <SecurityCodes>
                        <ISIN>XS0953958641</ISIN>
                    </SecurityCodes>
                    <Currency>EUR</Currency>
                    <NominalOrUnits>200000</NominalOrUnits>
                    <ExchangeRate>1</ExchangeRate>
                    <Price>104.798</Price>
                    <MarketValue>
                        <Amount>209596</Amount>
                        <AmountForeign>209596</AmountForeign>
                        <AmountCurrency>
                            <Currency>EUR</Currency>
                            <Amount>209596</Amount>
                        </AmountCurrency>
                    </MarketValue>
                </Assets>

Я могу получить информацию о (AUV = InterestClaimGross / Amount)за 1-й изин.Всего 58, но я получаю 57 из-за следующего брата -

Я хотел бы получить таблицу:

  ISIN          PRICE     AUV
1 XS1300502041 107.233 34027.4
2 XS0953958641 104.798   NA
3...

1 Ответ

0 голосов
/ 29 марта 2019

Самый простой способ - использовать функцию xmlToDataFrame из пакета XML:

library(XML)

df<-xmlToDataFrame("<Portfolio> <Assets>
               <SecurityCodes>
             ...
               </Assets></Portfolio>")

df
#sample output
 SecurityCodes Currency NominalOrUnits ExchangeRate   Price              MarketValue       InterestClaimGross
1  XS1300502041      EUR        2000000            1 107.233 21446602144660EUR2144660 34027.434027.4EUR34027.4
2  XS0953958641      EUR         200000            1 104.798    209596209596EUR209596                     <NA>
...