разделить строку, но сохранить вместе определенные подстроки - PullRequest
0 голосов
/ 28 мая 2020

Я хочу разбить символьный столбец во фрейме данных определенными разделяющими символами (например, пробелами, запятыми и точками с запятой). Однако я хочу исключить определенные фразы (в моем примере я хочу исключить «мой тест») из разделения.

Мне удалось получить обычное разделение строк, но я не знаю, как исключить определенные фразы .

library(tidyverse)

test <- data.frame(string = c("this is a,test;but I want to exclude my test",
                              "this is another;of my tests",
                              "this is my 3rd test"),
                   stringsAsFactors = FALSE)

test %>%
  mutate(new_string = str_split(test$string, pattern = " |,|;")) %>%
  unnest_wider(new_string)

Это дает:

# A tibble: 3 x 12
  string                                       ...1  ...2  ...3    ...4  ...5  ...6  ...7  ...8  ...9    ...10 ...11
  <chr>                                        <chr> <chr> <chr>   <chr> <chr> <chr> <chr> <chr> <chr>   <chr> <chr>
1 this is a,test;but I want to exclude my test this  is    a       test  but   I     want  to    exclude my    test 
2 this is another;of my tests                  this  is    another of    my    tests NA    NA    NA      NA    NA   
3 this is my 3rd test                          this  is    my      3rd   test  NA    NA    NA    NA      NA    NA

Однако мой желаемый результат будет (исключая «мой тест»):

# A tibble: 3 x 12
  string                                       ...1  ...2  ...3    ...4  ...5      ...6  ...7  ...8  ...9    ...10
  <chr>                                        <chr> <chr> <chr>   <chr> <chr>     <chr> <chr> <chr> <chr>   <chr>
1 this is a,test;but I want to exclude my test this  is    a       test  but       I     want  to    exclude my test 
2 this is another;of my tests                  this  is    another of    my tests  NA    NA    NA    NA      NA   
3 this is my 3rd test                          this  is    my      3rd   test      NA    NA    NA    NA      NA

Есть идеи? (побочный вопрос: есть идеи, как назвать столбцы в unnest_wider?)

1 Ответ

1 голос
/ 28 мая 2020

Простой обходной путь - добавить _ и удалить его позже:

test %>%
  mutate(string = gsub("my test", "my_test", string),
    new_string = str_split(string, pattern = "[ ,;]")) %>%
  unnest_wider(new_string) %>%
  mutate_all(~ gsub("my_test", "my test", .x))

Чтобы дать столбцам более значимые имена, вы можете использовать дополнительные параметры из pivot_wider.

...