Разделить столбец на несколько столбцов, используя str_match - PullRequest
0 голосов
/ 05 июня 2018

Я хочу разбить столбец на несколько столбцов, сопоставляя шаблоны

test <- data.frame("id" = c("Albertson's Inc.","Albertson's Inc."), "V3" = c("Reiterates FY 2004, Significant Developments, 2 June 2004, 53 words, (English)(Document MULTI00020050122e06201fkk)","EBITDA Hits Four Year Low,  Stock Diagnostics, 16:00 GMT, 9 June 2004, 245 words, (English)(Document STODIA0020040609e0690006g)"), stringsAsFactors = F)

Пока что код, который я использую для получения желаемого результата, похож на

library(stringr)
    df <- as.data.frame(str_match(test$V3, "^(.*)GMT,(.*),(.*)words,(.*)Document (.*)$")[,-1], stringsAsFactors = F)

Явозникли две проблемы с приведенным выше кодом. Во-первых, он не показывает результаты, когда отсутствует GMT, во-вторых, я хочу также столбец «id» в выводе df, любые предложения или другой подход, который я должен использовать для результатов, пожалуйста, поделитесь спасибо всем модераторам-программистам за такиеполезный форум.

1 Ответ

0 голосов
/ 05 июня 2018

не уверен на 100% в вашей проблеме "GTM".вот моя попытка:

ваши данные представителя:

test <- data.frame("id" = c("Albertson's Inc.","Albertson's Inc."), "V3" = c("Reiterates FY 2004, Significant Developments, 2 June 2004, 53 words, (English)(Document MULTI00020050122e06201fkk)","EBITDA Hits Four Year Low,  Stock Diagnostics, 16:00 GMT, 9 June 2004, 245 words, (English)(Document STODIA0020040609e0690006g)"), stringsAsFactors = F)

код:

library(tidyverse)    
test$V3 %>% map(~str_split(.,",(?!\\s*\\d{1,2}:\\d{1,2})|(?<=\\))(?=\\()") %>% unlist %>% trimws) %>%
        do.call(rbind,.) %>%
        cbind(test["id"],.)

результат:

#                    id                         1                            2           3         4         5                                    6
#    1 Albertson's Inc.        Reiterates FY 2004     Significant Developments 2 June 2004  53 words (English) (Document MULTI00020050122e06201fkk)
#    2 Albertson's Inc. EBITDA Hits Four Year Low Stock Diagnostics, 16:00 GMT 9 June 2004 245 words (English) (Document STODIA0020040609e0690006g)
...