Получить новый столбец только с первым именем в R - PullRequest
0 голосов
/ 17 июня 2020

Я хочу создать столбец, в котором будут только имена людей в наборе данных. В этом случае я просто хочу получить столбец со значениями John, David, Carey, and David и NA для тех, кто либо не человек, либо его нет. Однако я сталкиваюсь с двумя трудностями.

Во-первых, мне нужно отфильтровать все эти строки с заглавными буквами. Потому что они не ЛЮДИ; они ENTITIES.

Во-вторых, мне нужно извлечь слово прямо перед запятой, так как это первое имя.

Так что мне просто интересно, как лучше всего получить новую колонку для имен людей.

воспроизводимый набор данных

structure(list(company_number = c("04200766", "04200766", "04200766", 
"04200766", "04200766", "04200766"), directors = c("THOMAS, John Anthony", 
"THOMAS, David Huw", "BRIGHTON SECRETARY LIMITED", "THOMAS, Carey Rosaline", 
"THOMAS, David Huw", "BRIGHTON DIRECTOR LIMITED")), row.names = c(NA, 
-6L), class = c("data.table", "data.frame"))

Ответы [ 2 ]

3 голосов
/ 17 июня 2020

мы можем сделать это:

сначала возьмите первое слово после запятой

df$names <- sub(".*?, (.*?) .*","\\1",df$directors)

затем возьмите любые строки с более чем одним словом и сделайте это <NA>

df$names <- ifelse(sapply(strsplit(df$names, " "), length)>1,NA,df$names)

вывод:

> df
  company_number                  directors names
1       04200766       THOMAS, John Anthony  John
2       04200766          THOMAS, David Huw David
3       04200766 BRIGHTON SECRETARY LIMITED  <NA>
4       04200766     THOMAS, Carey Rosaline Carey
5       04200766          THOMAS, David Huw David
6       04200766  BRIGHTON DIRECTOR LIMITED  <NA>
1 голос
/ 17 июня 2020

Использование str_extract:

library(dplyr)
library(stringr)

df %>% mutate(people = str_extract(directors, '(?<=,\\s)\\w+'))

#   company_number                  directors people
#1:       04200766       THOMAS, John Anthony   John
#2:       04200766          THOMAS, David Huw  David
#3:       04200766 BRIGHTON SECRETARY LIMITED   <NA>
#4:       04200766     THOMAS, Carey Rosaline  Carey
#5:       04200766          THOMAS, David Huw  David
#6:       04200766  BRIGHTON DIRECTOR LIMITED   <NA>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...