【问题标题】:R: Separate string based on set of regular expressionsR:基于正则表达式集的分隔字符串
【发布时间】:2019-04-02 10:28:25
【问题描述】:

我有一个数据框foo.df,其中包含一个变量,该变量只是一个由多个子字符串组成的非常长的字符串。此外,我有匹配部分字符串的字符向量。数据框中的变量示例:

foo.df$var[1] [1] "Peter Paul SmithLabour3984234.55%Hans NicholsConservative103394.13%Turnout294834.3%

现在是字符向量的示例:

head(candidates) [1] "Peter Paul Smith" "Hans Nichols" "Denny Gross" "Walter Mittens"
[5] "Charles Butt" "Mitch Esterhazy"

我想创建一个变量foo.df$candidate1,其中包含出现在字符串中的第一个候选人的名称(即food.df$candidate1[1] 将是Peter Paul Smith)。我试图用grepl 来解决这个问题,但它不起作用,因为grepl 只使用candidates 的第一个条目。知道如何有效地做到这一点吗?

【问题讨论】:

  • gregexpr("%","Peter Paul SmithLabour3984234.55%Hans NicholsConservative103394.13%Turnout294834.3%") 返回出现% 的每个位置。您可以将它与 base R 一起使用来提取您想要的内容。或者,stringr 包具有处理字符串子集、提取、替换等的预制函数。

标签: r string dataframe match


【解决方案1】:

您可以将正则表达式 OR 字符 |pasteregmatches/regexpr 一起使用。

candidates <- scan(what = character(), text = '
"Peter Paul Smith"  "Hans Nichols" "Denny Gross" "Walter Mittens"')

var1 <- "Peter Paul SmithLabour3984234.55%Hans NicholsConservative103394.13%Turnout294834.3%"

foo.df <- data.frame(var1)

pat <- paste(candidates, collapse = "|")
regmatches(foo.df$var1, regexpr(pat, foo.df$var1))
#[1] "Peter Paul Smith"

foo.df$candidate1 <- regmatches(foo.df$var1, regexpr(pat, foo.df$var1))

【讨论】:

  • 谢谢,非常优雅!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 2010-10-16
  • 1970-01-01
相关资源
最近更新 更多