Выделите часть текста и создайте новую переменную - PullRequest
0 голосов
/ 04 марта 2020

У меня есть DF, который содержит две части информации в переменной: имя и местоположение. Я хочу разделить эту информацию на две переменные: NAMES AND ID.

My DF:

NAMES <- c ('Liam Smith - NY 30', 'Noah Johnson - LONDON UK-UK', 'William Williams',' James Brown - UK ',' Oliver Jones -UK YORK ',' Benjamin Garcia ',' Elijah Miller - SAN DIEGO ',' Lucas Davis - ',' Mason Rodriguez - ',' Logan Martinez - MIAMI ')
DF <-data.frame (NAMES)

Я хочу создать новую переменную, используя символ «-», то есть выберите все содержание после «-». Таким образом, мой DF будет выглядеть так:

NAMES <- c ('Liam Smith - NY 30', 'Noah Johnson - LONDON UK', 'William Williams',' James Brown - UK ',' Oliver Jones -UK YORK ',' Benjamin Garcia ',' Elijah Miller - SAN DIEGO ',' Lucas Davis - ',' Mason Rodriguez - ',' Logan Martinez - MIAMI ')
ID <- c ('NY 30', '- LONDON UK-UK', 'NO_ID', 'UK', 'UK YORK', 'NO_ID', 'SAN DIEGO', '-', '-', 'MIAMI')
DF <-data.frame (NAMES, ID)

Обратите внимание, что в некоторых ситуациях первым символом является пробел. Таким образом, если убрать пробел, мой последний DF будет выглядеть так:

NAMES <- c ('Liam Smith - NY 30', 'Noah Johnson - LONDON UK', 'William Williams',' James Brown - UK ',' Oliver Jones -UK YORK ',' Benjamin Garcia ',' Elijah Miller - SAN DIEGO ',' Lucas Davis - ',' Mason Rodriguez - ',' Logan Martinez - MIAMI ')
ID <- c ('NY 30', '- LONDON UK', 'NO_ID', 'UK', 'UK YORK', 'NO_ID', 'SAN DIEGO', '-', '-', 'MIAMI')
ID_NO_SPACE <- c ('NY 30', '- LONDON UK-UK', 'NO_ID', 'UK', 'UK YORK', 'NO_ID', 'SAN DIEGO', '-', '-', 'MIAMI')
DF <-data.frame (NAMES, ID, ID_NO_SPACE)

Итак, как бы я go подумал о создании новой переменной из символа «-»?

1 Ответ

0 голосов
/ 04 марта 2020

Мы можем использовать tidyr :: separator и указать разделитель как «-». После выполнения разделения я удаляю как начальные, так и конечные пробелы с помощью trimws(), а затем применяю значение «NO_ID» как к значениям NA, так и к значениям «» (пустая ячейка, но не NA), используя ifelse.

DF <- DF %>%
  separate(col = NAMES, into = c("Names", 'ID'), sep = '-') %>%
  mutate(ID = trimws(ID, 'both'), # remove leading/trailing spaces
         ID = ifelse(is.na(ID)|ID=='', 'NO_ID', ID))  # apply value to NA/blanks

Который производит

               Names        ID
1        Liam Smith      NY 30
2      Noah Johnson  LONDON UK
3   William Williams     NO_ID
4       James Brown         UK
5      Oliver Jones    UK YORK
6   Benjamin Garcia      NO_ID
7     Elijah Miller  SAN DIEGO
8       Lucas Davis      NO_ID
9   Mason Rodriguez      NO_ID
10   Logan Martinez      MIAMI
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...