Ваш первый блок кода не является корректной таблицей HTML, поэтому у вас возникнут проблемы. Он должен быть заключен в <table> ... </table>
, а каждая строка должна быть заключена в <tr>...</tr>
. Я не вижу ни одного из этих тегов в вашем образце.
Я могу вставить их вручную, предполагая, что каждая строка вашего образца - это строка в таблице. Это дает HTML-код
<table>
<tr><td class="rgGroupCol"> </td><td>Hope, Bob</td><td>7</td><td style="background-color:#BCD4E8;">0</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#ECE1BA;">7</td><td style="background-color:#F3ECCC;">7</td><td style="background-color:#F3ECCC;">0</td></tr>
<tr><td class="rgGroupCol"> </td><td>Tan, Sally </td><td>76</td><td style="background-color:#BCD4E8;">0</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#ECE1BA;">76</td><td style="background-color:#F3ECCC;">23</td><td style="background-color:#F3ECCC;">53</td></tr>
<tr> <td class="rgGroupCol"> </td><td>Smith, Mark</td><td>2</td><td style="background-color:#BCD4E8;">0</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#ECE1BA;">2</td><td style="background-color:#F3ECCC;">0</td><td style="background-color:#F3ECCC;">2</td></tr>
</table>
Затем, если вы поместите этот текст в строку, пакет rvest
может преобразовать его в кадр данных. Например,
sample <- '<table><tr><td class="rgGroupCol"> </td><td>Hope, Bob</td><td>7</td><td style="background-color:#BCD4E8;">0</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#ECE1BA;">7</td><td style="background-color:#F3ECCC;">7</td><td style="background-color:#F3ECCC;">0</td></tr>
<tr><td class="rgGroupCol"> </td><td>Tan, Sally </td><td>76</td><td style="background-color:#BCD4E8;">0</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#ECE1BA;">76</td><td style="background-color:#F3ECCC;">23</td><td style="background-color:#F3ECCC;">53</td></tr>
<tr> <td class="rgGroupCol"> </td><td>Smith, Mark</td><td>2</td><td style="background-color:#BCD4E8;">0</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#D2DEE8;"><span class="details_gridpercentage">0</span>0%</td><td style="background-color:#ECE1BA;">2</td><td style="background-color:#F3ECCC;">0</td><td style="background-color:#F3ECCC;">2</td></tr> </table>'
library(rvest)
sample1 <- minimal_html(sample)
sample1 %>%
html_node("table") %>%
html_table()
Это печатает таблицу
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 NA Hope, Bob 7 0 00% 00% 00% 7 7 0
2 NA Tan, Sally 76 0 00% 00% 00% 76 23 53
3 NA Smith, Mark 2 0 00% 00% 00% 2 0 2
Он находит только 8 столбцов данных, и это все, что я вижу в HTML;Я не знаю, почему вы думаете, что должно быть 11.
Отредактировано, чтобы добавить:
Основываясь на комментарии, вы не хотите анализировать HTML,Вы хотите удалить все теги HTML. Этот код делает это:
notags <- gsub("[<][^<>]*[>]", " ", sample)
При этом используются регулярные выражения: [<]
представляет один символ "<"
. Вероятно, вы можете использовать только <
без квадратных скобок, но я всегда забываю, какие символы имеют особое значение в регулярных выражениях, поэтому это может не сработать.
Тогда [^<>]
представляет любой символ, кроме "<"
или ">"
, а *
говорит «ноль или более» из них. Наконец, у нас есть заключительные >
в скобках.
Так что gsub
заменяет все, что похоже на тег HTML, на один пробел. Я не знаю всех правил HTML, чтобы знать, есть ли случаи, когда он будет делать что-то не так, но он должен обрабатывать большинство случаев.
Как только вы избавитесь от тегов, вы можете прочитать новыйСтрока с использованием read.table:
read.table(text = notags)
и с использованием того же sample
, как указано выше, вы получите такой результат:
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14
1 Hope, Bob 7 0 0 0% 0 0% 0 0% 7 7 0
2 Tan, Sally 76 0 0 0% 0 0% 0 0% 76 23 53
3 Smith, Mark 2 0 0 0% 0 0% 0 0% 2 0 2
Это, кажется, довольно близко к тому, что выхотеть;Я оставлю тебе последнюю часть очистки.