1) read.table Используйте read.table
с указанными значениями sep
и comment
, чтобы получить фрейм данных с двумя столбцами, в котором первый столбец является именами, а второй столбец -символы.Наконец, возьмите этот второй столбец и сверните его в одну строку.Пакеты или регулярные выражения не используются.
DF2 <- read.table(text = unlist(DF), sep = "(", comment = ")")
paste(DF2[[2]], collapse = ";")
## [1] "AFT;AIF;AIMC;ALLE;APH;ARES;ARR;BANC;BCX;BDC"
2) dplyr Мы можем использовать separate
из tidyr для разделения столбцов имен и символов, одновременно удаляя столбец имен.unlist
это и свернуть в одну строку.Необходимо использовать tidyr 0.8.2 или более позднюю версию.
library(dplyr)
library(tidyr)
DF %>%
separate(symbol, c(NA, "symbol2"), "[()]", extra = "drop") %>%
unlist %>%
paste(collapse = ";")
## [1] "AFT;AIF;AIMC;ALLE;APH;ARES;ARR;BANC;BCX;BDC"
3) gsub Мы можем сопоставить все, вплоть до (включая ".*\\("
, а также все, начиная с), т.е."\\).*"
и замените их пустой строкой.Затем сверните, как и раньше.
paste(gsub(".*\\(|\\).*", "", DF$symbol), collapse = ";")
## [1] "AFT;AIF;AIMC;ALLE;APH;ARES;ARR;BANC;BCX;BDC"
4) trimws Это еще одно базовое решение.Требуется R 3.6.0 или более поздняя версия (в настоящее время r-devel).Мы определяем пробел как что-либо, кроме скобок, и используем trimws
для его удаления.Затем мы определяем пробелы в скобках и затем удаляем их.Это оставляет нас с символами, которые мы теперь можем свернуть.
paste(trimws(trimws(DF$symbol, white = "[^()]"), white = "[()]"), collapse = ";")
## [1] "AFT;AIF;AIMC;ALLE;APH;ARES;ARR;BANC;BCX;BDC"
Примечание
Вводимый в воспроизводимой форме:
Lines <- "
symbol
1 | Apollo Senior Floating Rate Fund Inc. (AFT)
2 | Apollo Tactical Income Fund Inc. (AIF)
3 | Altra Industrial Motion Corp. (AIMC)
4 | Allegion plc (ALLE)
5 | Amphenol Corporation (APH)
6 | Ares Management Corporation (ARES)
7 | ARMOUR Residential REIT, Inc. (ARR)
8 | Banc of California, Inc. (BANC)
9 | BlackRock Resources (BCX)
10| Belden Inc (BDC)"
DF <- read.table(text = Lines, sep = "|", strip.white = TRUE, as.is = TRUE)