library(rvest)
library(tidyverse)
url = 'https://en.wikipedia.org/wiki/2023_Nigerian_House_of_Representatives_election'
html_content = read_html(url)
tables = html_table(html_content, fill = TRUE)
tb_abia = tables[[9]]
#remove first row
names(tb_abia) <- tb_abia[1,]
tb_abia <- tb_abia[-1,]
view(tb_abia)
tb_abia$Status
[1] "Incumbent renominatedNew member electedLP gain"
[2] "Incumbent retiredNew member electedLP gain"
приведенный выше столбец (tb_abia$Status) - это то, что я хочу разделить на: «Действующий президент повторно назначен», «Избран новый член», «Прирост LP», «Действующий президент вышел на пенсию» и т. д.
библиотека (rvest) библиотека (tidyverse) url = 'en.wikipedia.org/wiki/…' html_content = read_html(url) table = html_table(html_content, fill = TRUE) class(tables) tb_abia = table[[9 ]] class(tb_abia) view(tb_abia) #удалить имена первых строк(tb_abia) <- tb_abia[1,] tb_abia <- tb_abia[-1,] view(tb_abia) tb_abia$Status
> tb_abia$Status #column Я хочу разделить его значения на отдельные столбцы [1] «Действующий президент переназначенНовый член избранный прирост LP» [2] «Действующий президент вышел на пенсиюНовый член избранный LP прирост» [3] «Действующий президент переизбран»
В этом случае использование xml_find_all(html_content, ".//br") %>% xml_add_sibling("p", "\n"), а затем xml_find_all(html_content, ".//br") %>% xml_remove() перед вызовом html_table приведет к "Incumbent renominated\nNew member elected\nLP gain", который затем можно разделить на \n.
@Марийн, я благодарна, но попытки разделить \n привели меня к странному результату.
Можете ли вы уточнить, что насчет результата «странного»? Один из способов разделения - tb_abia$Status <- str_split(tb_abia$Status,"\n"), тогда первая строка будет tb_abia$Status[[1]], а элементы - tb_abia$Status[[1]][1] (действующий президент переназначен), tb_abia$Status[[1]][2] (избран новый член) и tb_abia$Status[[1]][3] (выигрыш LP).





Комментарий Марины — хорошее решение вашей проблемы.
Вот еще одно «быстрое и грязное» предложение:
tb_abia |>
mutate(Status=gsub("(New member elected)", '_\\1_',Status)) |>
separate(Status, into=c("S1","S2","S3"),sep = "_")
Обратите внимание, что вы, возможно, захотите добавить больше разделенных случаев, поэтому не стесняйтесь изменять предоставленный код.
интересно, то, что вы считаете «быстрым и грязным» предложением, похоже, дает мне прогресс, хотелось бы сделать снимок экрана с результатом, чтобы вы могли его увидеть
@BashirAbubakar Я рад, что смог помочь! скриншот не нужен, я видел результат
спасибо, я глубоко признателен, и последнее, пожалуйста: как мне сделать так, чтобы в этих строках отображалось NA, т. е. в которых действующий президент выиграл переизбрание, в этом случае S2 будет, например, «выигранным переизбранием», а S3 будет выигрышем действующей партии, т. е. «удержанием НДП» так что это имеет значение для вечеринки
@BashirAbubakar добавьте еще одну мутацию в конце: mutate(S2=ifelse(is.na(S2),'won reelection',S2), S3=ifelse(is.na(S3),"PDP hold",S3))
Словами не выразить мою благодарность за это, еще раз спасибо миллион
извините, забыл добавить это в столбцах, таких как S1, где у меня есть строки, содержащие: «Действующий президент вышел из первичной[g][39]Действующий президент проиграл переизбрание из-за выдвижения новой партии», пожалуйста, как мне сохранить только часть «Действующий президент проиграл» переизбрание по выдвижению новой партии», а также убрать из строк цифры и скобки. Спасибо
Без примера ваших данных и желаемого результата сложно дать подробный ответ. Пожалуйста, ознакомьтесь с тем, как предоставить необходимую информацию здесь