Подтвердить что ты не робот

Удалите круглые скобки и текст внутри строк из R

В R у меня есть список компаний, таких как:

companies  <-  data.frame(Name=c("Company A Inc (COMPA)","Company B (BEELINE)", "Company C Inc. (Coco)", "Company D Inc.", "Company E"))

Я хочу удалить текст с помощью скобок, в результате получится следующий список:

                  Name
1        Company A Inc 
2            Company B
3       Company C Inc.
4       Company D Inc.
5            Company E

Один из подходов, который я попробовал, состоял в том, чтобы разбить строку, а затем использовать ldply:

companies$Name <- as.character(companies$Name)
c<-strsplit(companies$Name, "\\(")
ldply(c)

Но поскольку не все названия компаний имеют круглые скобки, это не удается:

Error in list_to_dataframe(res, attr(.data, "split_labels"), .id, id_as_factor) : 
  Results do not have equal lengths

Я не женат на решении strsplit. Все, что удаляет этот текст, и круглые скобки будут в порядке.

4b9b3361

Ответ 1

A gsub должен работать здесь

gsub("\\s*\\([^\\)]+\\)","",as.character(companies$Name))

# [1] "Company A Inc"  "Company B"      "Company C Inc."
# [4] "Company D Inc." "Company E" 

Здесь мы просто заменяем вхождения "(...)" ничем (также удаляя любое ведущее пространство). R заставляет его выглядеть хуже, чем со всеми экранами, которые мы должны делать для скобок, поскольку они являются специальными символами в регулярных выражениях.

Ответ 2

Вы можете использовать stringr::str_replace. Это приятно, потому что он принимает факторные переменные.

companies <- data.frame(Name=c("Company A Inc (COMPA)","Company B (BEELINE)", 
                               "Company C Inc. (Coco)", "Company D Inc.", 
                               "Company E"))

library(stringr)
str_replace(companies$Name, " \\(.*\\)", "")
# [1] "Company A Inc"  "Company B"      "Company C Inc." 
# [4] "Company D Inc." "Company E"

И если вы все еще хотите использовать strsplit, вы можете сделать

companies$Name <- as.character(companies$Name)
unlist(strsplit(companies$Name, " \\(.*\\)"))
# [1] "Company A Inc"  "Company B"      "Company C Inc."
# [4] "Company D Inc." "Company E" 

Ответ 3

Вы также можете использовать:

library(qdap)
companies$Name <-  genX(companies$Name, " (", ")")

companies
        Name
1  Company A Inc
2       CompanyB
3 Company C Inc.
4 Company D Inc.
5       CompanyE

Ответ 4

library(qdap)
bracketX(companies$Name) -> companies$Name

Ответ 5

QDAP - это пакет для количественного анализа дискурса ("Пакет для количественного анализа дискурса"). Одна из функций для очистки и предварительной обработки текста - это скобка X(), которая удаляет текст в квадратных скобках, скобках и скобках для ключей.