Код ниже должен работать для вас. Он использует более сложный шаблон разбиения с использованием регулярных выражений. (\\s{2,}|\\s(?=[0-9]))
, так что он разделяет любые символы, если имеется более двух пробелов (\\s{2,}
) или (|
), один пробел, если за ним следует число (\\s(?=[0-9])
). Это может все еще быть обманутым, если имя банка содержит номер (например, «Банк 3 5.67%»), что приведет к его отказу.
library(stringr)
dat <-
list(c("BANK Percentage"),
c("JP MORGAN 16.93%"),
c("BNP PARIBAS 14.29%"),
c("JAPAN POST BANK 13.96%"),
c("Sumitomo Mitsui Banking 9.80%"),
c("Banco Santander 8.67%"),
c("Deutsche Bank 6.26%"),
c("CITIBANK 6.23%"),
c("Barclays Bank 4.84%"),
c("Royal Bank of Canada 4.38%"),
c("Postal Savings Bank of China Co Ltd 4.22%"))
portfolio <-
lapply(dat, str_split, "(\\s{2,}|\\s(?=[0-9]))", n = 2, simplify = TRUE)
portfolio <- do.call(rbind, portfolio)
portfolio
#> [,1] [,2]
#> [1,] "BANK" "Percentage"
#> [2,] "JP MORGAN" "16.93%"
#> [3,] "BNP PARIBAS" "14.29%"
#> [4,] "JAPAN POST BANK" "13.96%"
#> [5,] "Sumitomo Mitsui Banking" "9.80%"
#> [6,] "Banco Santander" "8.67%"
#> [7,] "Deutsche Bank" "6.26%"
#> [8,] "CITIBANK" "6.23%"
#> [9,] "Barclays Bank" "4.84%"
#> [10,] "Royal Bank of Canada" "4.38%"
#> [11,] "Postal Savings Bank of China Co Ltd" "4.22%"
Создано в 2020-04-13 Представить пакет (v0.3.0)