【问题标题】:Get a new column with only the first name in R获取一个只有 R 中名字的新列
【发布时间】:2020-06-17 11:16:32
【问题描述】:

我想创建一个列以仅包含数据集中人员的名字。在这种情况下,我只想为那些非人类或没有值的人获取一个值为John, David, Carey, and DavidNA 值的列。但是,我面临两个困难。

首先,我需要过滤掉所有带有大写字母的行。因为他们不是人;它们是实体。

第二个是我需要在逗号之前提取单词,因为它们是名字。

所以我只是想知道为人们的名字获取新列的最佳方法是什么。

可重现的数据集

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

【问题讨论】:

    标签: r regex dplyr data.table stringr


    【解决方案1】:

    我们可以这样做:

    先取逗号后的第一个词

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

    然后将任何超过一个单词的字符串设为&lt;NA&gt;

    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>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你的方法更干净!!谢谢@Ronak Shah!
      猜你喜欢
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多