Как управлять значением отдельной ячейки на основе атрибута ячейки при анализе таблицы с помощью rvest :: html_table () - PullRequest
0 голосов
/ 09 июля 2020

Пожалуйста, обратите внимание на эту таблицу

html_source <- 
'
<table>
    <thead> 
        <tr>
            <th width="271"><abbr title="Nome stazione">Stazione</abbr></th>
            <th width="60"><abbr title="Provincia">Prov.</abbr></th>
            <th width="60"><abbr title="Temp. Min ">Temp. Min</abbr></th>
            <th width="60"><abbr title="Temp. Max">Temp. Max</abbr></th>
            <th width="60"><abbr title="Umid. Min">Umid. Min</abbr></th>
            <th width="70"><abbr title="Umid. Max">Umid. Max</abbr></th>
            <th width="60"><abbr title="Raffica Max">Raffica Max</abbr></th>
            <th width="90"><abbr title="Pioggia">Pioggia</abbr></th>
            <th width="90"><abbr title="Pressione">Pressione</abbr></th>
        </tr>
    </thead> 
    <tbody> 
                    <tr>
                <td><span class="nome">Dorno</span></td>
                <td><span class="provincia">PV</span></td>
                <td><span class="active">6.4&deg;C</span></td>
                <td><span class="active">9.4&deg;C</span></td>
                <td><span class="red">86%</span></td>
                <td><span class="active">94%</span></td>
                <td><span class="red">11.3 km/h</span></td>
                <td><span class="active">2.4 mm/h</span></td>
                <td><span class="active">1019.7 hPa</span></td>
            </tr>
                        <tr>
                <td><span class="nome">Pomezia</span></td>
                <td><span class="provincia">RM</span></td>
                <td><span class="active">11.7&deg;C</span></td>
                <td><span class="red">14.8&deg;C</span></td>
                <td><span class="active">82%</span></td>
                <td><span class="active">92%</span></td>
                <td><span class="active">14.5 km/h</span></td>
                <td><span class="red">0 mm/h</span></td>
                <td><span class="active">1022.3 hPa</span></td>
            </tr>
  </tbody> 
</table>
'

Я хочу проанализировать значения в таблице, но также заменил NA значения в ячейках, где указан атрибут class="red".

I видел этот ответ , но это относится ко всем строкам, как вы управляете каждой ячейкой независимо?

require(rvest)
require(dplyr)


res <- 
  xml2::read_html(html_source) %>%
  html_table()

View(res[[1]])

enter image description here


res_expected <- res[[1]]

res_expected$`Umid. Min`[1] <- NA
res_expected$`Raffica Max`[1] <- NA

res_expected$`Temp. Max`[2] <- NA
res_expected$Pioggia[2] <- NA

View(res_expected)

введите описание изображения здесь

1 Ответ

1 голос
/ 09 июля 2020

Вы можете удалить узлы диапазона, которые имеют класс «красный», например:

require(rvest)
require(dplyr)

parsed <- xml2::read_html(html_source)
xml2::xml_find_all(parsed, './/td/span[@class="red"]') %>% xml2::xml_remove()
res <- parsed %>% xml2::xml_find_first('.//table') %>% html_table()

Это не установит для них <NA>, но, по крайней мере, удалит значения. При желании вы все равно можете выполнить команду res %>% mutate_all(~ifelse(.=='', NA, .)), чтобы очистить эти пустые строки.

...