#html #r #html-table #tidyverse
Вопрос:
У меня есть следующий HTML-файл, доступный отсюда:
Я попробовал следующий код:
library(tidyverse)
html_file <- "my_html_file.html"
html <- xml2::read_html(html_file,
encoding = "UTF-8",
options = "RECOVER",
warn = FALSE, verbose = TRUE)
html_res <- rvest::html_table(html, trim = FALSE)
df <- html_res[[1]]
df %>%
janitor::clean_names() %>%
dplyr::select(run_id, s_id, s_number, library, s_name, tissue)
Результат, который он мне дает, выглядит следующим образом:
# A tibble: 26 x 6
run_id s_id s_number library s_name tissue
<chr> <chr> <chr> <chr> <chr> <chr>
1 "210510_VH00236_65_AAAJ… "KS_=rn… "S1" "KAPA_HMR" "01_PaS_6h_0uM_1<… "Cervical MS…
2 "210510_VH00236_65_AAAJ… "KS_002" "S2" "K=rnAPA_H… "02_PaS_6h_0uM_2" "Cervical MS…
3 "210510_VH00236_65_AAAJ… "KS_003" "S3" "KAPA_HMR" "Cervical MSC" ""
4 "210510_VH00236_65_AAAJ… "KS_004" "S4=rntd… "KAPA_HMR" "04_PaS_6h_20uM_1" "Cervica=r…
5 "210510_VH00=rn236_65… "KS_005" "S5" "KAPA_HMR=r… "05_PaS_6h_20uM_2" "Cervical MS…
6 "210510_VH00236_65_AAAJ… "KS_006" "S6" "KAPA_HMR" "06_PaS_6h=rn_2… "Cervical MS…
7 "210510_VH00236_65=rn… "KS_008" "S8" "KAPA_HMR" "08_PaS_6h_50uM_2" "Cervical MS…
8 "210510_VH00236_65_AAAJ… "KS_=rn… "S9" "KAPA_HMR" "09_PaS_6h_50uM_3… "Cervical MS…
9 "210510_VH00236_65_AAAJ… "KS_010" "S10" "KAPA_HMR" "10_PaS_24h_0uM_1" "Cervical MS…
10 "210510_VH00236_65_AAA=… "KS_011" "S11" "KAPA_HMR" "11_PaS_24h_0uM_2" "Cervical MS…
# … with 16 more rows
Обратите внимание, что он не проанализирован полностью. =rn
В нем все еще содержится какая-то строка.
Как я могу решить эту проблему?
Комментарии:
1. Как мы используем HTML-файл, который вы связали? Можете ли вы предоставить
dput(df)
вместо этого ?2. @RonakShah После того, как вы перейдете по ссылке dpaste.org/oGQG . Вы можете скопировать текст
Copy Snippet
оттуда, вставить в редактор и сохранить как HTML. Я не могу использоватьdput
, потому что вывод будет слишком большим, чтобы помещать его сюда.3. Когда я сохраняю этот фрагмент и просматриваю HTML, я вижу некоторые ошибки, которые вы хотите исправить в браузере. Например, в строке 3 таблицы отсутствует
Read
столбец, а другие записи сдвинуты влево. Эти ошибки содержатся в исходных данных, они не являются результатом анализаrvest::html_table
.
Ответ №1:
Может быть, это только начало.
Удалены все вхождения 'rn'
с <
и =
вместе с <a>
тем, где <
необязательно и td>
. Основная задача состоит в том, чтобы выявить закономерности, которые не нужны в данных.
library(dplyr)
df %>%
janitor::clean_names() %>%
dplyr::select(run_id, s_id, s_number, library, s_name, tissue) %>%
mutate(across(.fns = ~gsub('[rn<=]|<?a>|td>', '', .)))
# run_id s_id s_number library s_name tissue
# <chr> <chr> <chr> <chr> <chr> <chr>
# 1 210510_VH00236_65_AAAJGJ5M5 KS_001 S1 KAPA_HMR 01_PaS_6h_0uM_1/ "Cervical MSC"
# 2 210510_VH00236_65_AAAJGJ5M5 KS_002 S2 KAPA_HMR 02_PaS_6h_0uM_2 "Cervical MSC"
# 3 210510_VH00236_65_AAAJGJ5M5 KS_003 S3 KAPA_HMR Cervical MSC ""
# 4 210510_VH00236_65_AAAJGJ5M5 KS_004 S4 KAPA_HMR 04_PaS_6h_20uM_1 "Cervical MSC"
# 5 210510_VH00236_65_AAAJGJ5M5 KS_005 S5 KAPA_HMR 05_PaS_6h_20uM_2 "Cervical MSC"
# 6 210510_VH00236_65_AAAJGJ5M5 KS_006 S6 KAPA_HMR 06_PaS_6h_20uM_3 "Cervical MSC"
# 7 210510_VH00236_65_AAAJGJ5M5 KS_008 S8 KAPA_HMR 08_PaS_6h_50uM_2 "Cervical MSC"
# 8 210510_VH00236_65_AAAJGJ5M5 KS_009 S9 KAPA_HMR 09_PaS_6h_50uM_3 "Cervical MSC"
# 9 210510_VH00236_65_AAAJGJ5M5 KS_010 S10 KAPA_HMR 10_PaS_24h_0uM_1 "Cervical MSC"
#10 210510_VH00236_65_AAAJGJ5M5 KS_011 S11 KAPA_HMR 11_PaS_24h_0uM_2 "Cervical MSC"
# … with 16 more rows
Комментарии:
1. Спасибо. Но в третьей строке
s_name
значение смещено влево от ткани. Ему не удается проанализировать содержимое. Он должен содержать03_PaS_6h_0uM_3
. Как я могу решить эту проблему?2. Это не вытекает из моего кода. Это уже присутствует, когда вы делаете
df %>% janitor::clean_names() %>% dplyr::select(run_id, s_id, s_number, library, s_name, tissue)
3. Я это понимаю. Это проблема с анализом из
rvest::html_table()
илиxml2::read_html
. Поэтому главный вопрос заключается в том, как правильно и чисто выполнить первоначальный анализ .4. Извините, мне не было ясно, что это то, что вы искали в своем посте. Я думал, вы хотите убрать дополнительные тексты, с
=rn
которыми в нем.