簡體   English   中英

在 R 中獲取一個只有名字的新列

[英]Get a new column with only the first name in R

我想創建一個列以僅包含數據集中人員的名字。 在這種情況下,我只想為那些非人類或沒有值的人獲取一個列,其中包含John, David, Carey, and David的值和NA值。 但是,我面臨兩個困難。

首先是我需要過濾掉所有帶有大寫字母的行。 因為他們不是人; 他們是實體。

第二個是我需要在逗號之前提取單詞,因為這些是名字。

所以我只是想知道為人們的名字獲取新列的最佳方法是什么。

可重現的數據集

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"))

我們做得到:

先取逗號后的第一個詞

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

然后取任何超過一個單詞的字符串並將其<NA>

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

output:

> 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>

使用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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM