【问题标题】:Extract first word from a column and insert into new column [duplicate]从列中提取第一个单词并插入新列[重复]
【发布时间】:2015-11-02 17:40:44
【问题描述】:

我在下面有一个数据框,想提取第一个单词并将其插入到新列中

Dataframe1:

COL1
Nick K Jones
Dave G Barros
Matt H Smith

将其转换为:

Dataframe2:
COL1              COL2
Nick K Jones      Nick
Dave G Barros     Dave
Matt H Smith      Matt

【问题讨论】:

    标签: r dataframe extract


    【解决方案1】:

    您可以使用正则表达式("([A-Za-z]+)""([[:alpha:]]+)""(\\w+)")来获取第一个单词

    Dataframe1$COL2 <- gsub("([A-Za-z]+).*", "\\1", Dataframe1$COL1)
    

    【讨论】:

    • 当您只需要替换第一次出现时,为什么要使用gsub。使用sub
    • @Saksham 你是对的sub 在这里会更好,谢谢
    • 如果第一个单词是数字怎么办:495 或 Q1?当我尝试这个公式时,它只保留“Q”而不是 Q1,对于 495,它会取其后的所有数字:“495 3Be”@nongkrong
    • @Nick 试试"(\\w+)" 选项,或者您可以在括号中添加匹配数字的选项,即。 [0-9A-Za-z]+[[:digit:]]
    • 不幸的是,这不起作用。我基本上只想抓住第一个单词(无论是空格前的字符还是数字)。因此,如果我有 P1 Media,过去它会打印出 P。对于 495 54,它会打印出所有内容,而不仅仅是 495。@nongkrong
    【解决方案2】:

    strsplit 函数很有用

    Dataframe1$COL2 <- strsplit(Dataframe1$COL1, " ")[[1]][1]
    

    然后您可以更改最后一个括号内的数字以从字符串中选择其他部分。

    【讨论】:

      【解决方案3】:

      我们可以使用函数stringr::word:

      library(stringr)
      
      Dataframe1$COL2 <- word(Dataframe2$COL1, 1)
      

      【讨论】:

      • 这很有效,但对于较大的数据来说非常慢。我正在处理半百万行,str_extract(Dataframe2$COL1, '[A-Za-z]+')(也来自stringr 包)至少快十倍。
      • 显然是简单问题的最佳答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 2019-05-21
      • 1970-01-01
      相关资源
      最近更新 更多