Как разделить эту строку на несколько столбцов? - PullRequest
1 голос
/ 25 февраля 2020

У меня есть эта строка, и мне нужно разбить ее на разные столбцы

legend = "Frequency..Derivatives.measure...Derivatives.instrument...Derivatives.risk.category...Derivatives.reporting.country...Derivatives.counterparty.sector...Derivatives.counterparty.country...Derivatives.underlying.risk.sector...Derivatives.currency.leg.1...Derivatives.currency.leg.2...Derivatives.maturity...Derivatives.rating...Derivatives.execution.method...Derivatives.basis...Period..30.06.1998.31.12.1998.30.06.1999.31.12.1999.30.06.2000.31.12.2000.30.06.2001.31.12.2001.30.06.2002.31.12.2002.30.06.2003.31.12.2003.30.06.2004.31.12.2004.30.06.2005.31.12.2005.30.06.2006.31.12.2006.30.06.2007.31.12.2007.30.06.2008.31.12.2008.30.06.2009.31.12.2009.30.06.2010.31.12.2010.30.06.2011.31.12.2011.30.06.2012.31.12.2012.30.06.2013.31.12.2013.30.06.2014.31.12.2014.30.06.2015.31.12.2015.30.06.2016.31.12.2016.30.06.2017.31.12.2017.30.06.2018.31.12.2018.30.06.2019"

Каждые три точки должны содержать новый столбец, пока не появится слово perdiod . Обратите внимание, что первое слово Frequency отделяется от второго слова Derivatives.measure только двумя точками, а не тремя .

После этого идет серия Date (интервал 6 месяцев) и их следует разделить следующим образом: «каждый раз, когда число 4 di git выполняет разбиение».

Как я могу это сделать? Спасибо

1 Ответ

2 голосов
/ 25 февраля 2020

Мы можем использовать strsplit для разделения на ... с fixed = TRUE на list векторов и затем rbind векторов для создания data.frame

df1 <- do.call(rbind.data.frame, strsplit(legend, "...", fixed = TRUE))
names(df1) <- paste0("V", seq_along(df1))

Если нам также нужно включить последнее условие, чтобы разделить «Период»

library(dplyr)
library(tidyr)
library(stringr)
library(data.table)
tibble(col = legend) %>% 
  mutate(rn = row_number()) %>% 
  separate_rows(col, sep= "[.]{3}") %>%
  mutate(rn2 = str_c("V", rowid(rn))) %>%
  pivot_wider(names_from = rn2, values_from = col) %>% 
  rename_at(ncol(.), ~ "Period") %>% 
  mutate(Period = str_remove(Period, "Period\\.+")) %>% 
  separate_rows(Period, sep="(?<=\\.[0-9]{4})\\.")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...