【问题标题】:Extracting specific word followed by another in R在R中提取特定单词后跟另一个单词
【发布时间】:2019-07-16 06:30:15
【问题描述】:

我有空缺职位的描述。我想从他们那里拿分,然后把它贴在相邻的列中。可以通过获取文本描述中“等级:”旁边的单词来完成

模拟

  structure(list(description = structure(2:1, .Label = c("Grade: L3 Position title bla bla bla", 
"Head of xxxxxxxx Grade: L5 Last Date to Apply: 22nd July 2019"
), class = "factor"), division = structure(2:1, .Label = c("ABC", 
"XYZ"), class = "factor")), class = "data.frame", row.names = c(NA, 
-2L))

请求的结果

Description     Division     Grade
sdsdsdsd         XYZ          L5
asdasdsadas      ABC          L3

我找到了这个解决方案,它可以将单词取出,但不能放在列中。

Extract text that follows a specific word/s in R

【问题讨论】:

  • 我找到了这个解决方案,它可以取出单词但不能放入列所以你的问题不是得到单词而只是分配结果?
  • 是的,但是也希望有一个不同的更有效的解决方案。
  • df$Grade <- sub(".+(?<=Grade: )(.{2}).+", "\\1", df$description, perl=TRUE)?
  • 也许你可以分享一下你是如何得到这些词的。此外,您提供的数据具有用于描述的类因子,它不适用于 strplit(或者它吗?)
  • @ronakshah,我们可以让它适用于Grade: L3 和空格Grade : L3 的情况

标签: r regex dataframe


【解决方案1】:

您可以使用sub 并在"Grade" 之后提取一个单词,在: 前后有0 个或多个空格

sub(".*Grade\\s*:\\s*(\\w+).*", "\\1", df$description)
#[1] "L5" "L3"

【讨论】:

    【解决方案2】:

    你可以像这样使用 stringr 包:

    library(stringr)
    df[,"Grade"] <- sub("Grade: ", "", str_extract(df$description, "Grade: [^ ]+"))
    

    数据:

    df <- structure(list(description = structure(2:1, .Label = c("Grade: L3 Position title bla bla bla", 
                                                           "Head of xxxxxxxx Grade: L5 Last Date to Apply: 22nd July 2019"
    ), class = "factor"), division = structure(2:1, .Label = c("ABC", 
                                                               "XYZ"), class = "factor")), class = "data.frame", row.names = c(NA, 
                                                                                                                               -2L))
    

    编辑: 我刚刚看到在 cmets 中有更好的答案。所以最好使用其中一个,因为它们不依赖额外的包。

    【讨论】:

    • 嗨,感谢您的解决方案,这让我在 df$Grade 的原始数据集中获得的不仅仅是 L3 和 L5
    • 那么请分享您的原始数据集的一行。
    • 我认为问题是空白,即在某些情况下有 Grade: L3 在其他情况下,它是 Grade : L3
    • 试试:df[,"Grade"] &lt;- sub("Grade\\s*: ", "", str_extract(df$description, "Grade\\s*: [^ ]+"))
    猜你喜欢
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多