根据正则表达式和正则表达式值改变数据框
Mutate a data frame based on regex and regex value
如果某个特征与正则表达式匹配,我想使用匹配值来填充新特征,否则不适用。
我找到 this post 并尝试使用答案来解决我的问题。
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)
)
我不知道你为什么要用 mutate 和 ifelse 打扰,因为它是一个衬里,使用 str_extract
如果它什么都不提取就会给你一个 NA 的事实:
> df$cad = str_extract(df$sometext,"\[[^]]*\]")
> df
id sometext cad
1 1 [cad] apples [cad]
2 2 bannanas <NA>
您可以通过单独尝试表达式并查看会发生什么来调试 R。例如,您的 ifelse 的第一个元素是:
> str_locate(df$sometext,"\[[^]]*\]")
start end
[1,] 1 5
[2,] NA NA
这显然不能作为 ifelse
的第一个参数。那么你认为为什么会这样呢?
> df$cad <- regmatches(df$sometext, gregexpr("\[[^]]*\]", df$sometext))
> df
id sometext cad
1 1 [cad] apples [cad]
2 2 bannanas
如果某个特征与正则表达式匹配,我想使用匹配值来填充新特征,否则不适用。
我找到 this post 并尝试使用答案来解决我的问题。
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)
)
我不知道你为什么要用 mutate 和 ifelse 打扰,因为它是一个衬里,使用 str_extract
如果它什么都不提取就会给你一个 NA 的事实:
> df$cad = str_extract(df$sometext,"\[[^]]*\]")
> df
id sometext cad
1 1 [cad] apples [cad]
2 2 bannanas <NA>
您可以通过单独尝试表达式并查看会发生什么来调试 R。例如,您的 ifelse 的第一个元素是:
> str_locate(df$sometext,"\[[^]]*\]")
start end
[1,] 1 5
[2,] NA NA
这显然不能作为 ifelse
的第一个参数。那么你认为为什么会这样呢?
> df$cad <- regmatches(df$sometext, gregexpr("\[[^]]*\]", df$sometext))
> df
id sometext cad
1 1 [cad] apples [cad]
2 2 bannanas