根据正则表达式和正则表达式值

时间:2017-07-14 07:01:06

标签: r regex dplyr stringr

功能是否与正则表达式匹配,我想使用匹配的值来填充新功能,否则NA。

我发现了this帖子并尝试使用答案来解决我的问题。

library(dplyr)
library(stringr)

dat.p <- dat.p %>%
  mutate(
    cad = ifelse(str_locate(text_field, "\\[[^]]*\\]"), 
                 str_extract(text_field, "\\[[^]]*\\]"),
                 NA)
    )

如果text_field中的正则表达式\\[[^]]*\\]匹配,则在新列cad中使用该值,否则使用cad NA的值。

当我运行它时,我收到错误:

Error: wrong result size (1000000), expected 500000 or 1

我该怎么做?

一些示例数据:

df <- data.frame(
  id = 1:2,
  sometext = c("[cad] apples", "bannanas")
)

df.desired <- data.frame(
  id = 1:2,
  sometext = c("[cad] apples", "bannanas"),
  cad = c("[cad]", NA)
)

2 个答案:

答案 0 :(得分:3)

我不知道你为什么要使用mutate和ifelse来使用str_extract如果它不提取任何内容时> df$cad = str_extract(df$sometext,"\\[[^]]*\\]") > df id sometext cad 1 1 [cad] apples [cad] 2 2 bannanas <NA> 会给你一个NA的事实呢?

> str_locate(df$sometext,"\\[[^]]*\\]")
     start end
[1,]     1   5
[2,]    NA  NA

您可以通过单独尝试表达式并查看发生的情况来调试R.例如,ifelse的第一个元素是:

ifelse

显然无法作为2017-07-14 09:09:19.285 App[23194:15302685] GoogleTagManager info: Loading container: GTM-XXX 2017-07-14 09:09:19.286 App[23194:15302665] GoogleTagManager info: Attempting to load saved version of container GTM-XXX 2017-07-14 09:09:19.310 App[23194:15302665] GoogleTagManager info: Processing logged event: gtm.load with parameters: (null) 2017-07-14 09:09:19.324 App[23194:15302665] GoogleTagManager info: Sending universal analytics hit: { "&t" = screenview; "&tid" = "UA-000000-1"; } [...] 的第一个参数。那你为什么认为呢?

答案 1 :(得分:2)

> df$cad <- regmatches(df$sometext, gregexpr("\\[[^]]*\\]", df$sometext))
> df
  id     sometext   cad
1  1 [cad] apples [cad]
2  2     bannanas