我目前正試圖根據pattern-column中的regex-values是否存在于description-column中來索引應該和不應該被保留的行,在下面的資料中。
data <- data. frame(id = c(1。 2。 2,3。 3,4),
old_levels = c(0。 1, 1, 1,1。 2),
級別 = c(1。 2, 3, 2,3。 4),
描述 = c("蔬菜"。
"肉", "肉"。 "soda"),
模式 = c("蔬菜",)
"水果",
"?!(蔬菜|水果)",
"水果",
"?!(蔬菜|水果)",
NA))
使用dplyr,我想下面的例子應該能行:
data %>% rowwise() %> % mutate(matches = grepl(pattern。 description))
然而,這產生了:
# A tibble: 6 x 6
# Rowwise:
id old_levels levels description pattern matches
<dbl> < dbl> <dbl> <chr> < chr> <lgl>/span>
1 1 0 1 蔬菜蔬菜 TRUE
2 2 1 2 水果水果 TRUE
3 2 1 3 fruit ? ! (vegetable|fruit) FALSE
4 3 1 2肉類水果 FALSE
5 3 1 3 肉 ? ! (vegetable|fruit) FALSE
6 4 2 4 蘇打水 NA NA
NA是預期的,并按預期作業,然而我正在努力使負數的lookahead作業,因為第5行的matches應該是TRUE...
如果有任何幫助,我們將不勝感激!
。uj5u.com熱心網友回復:
lookahead的語法是(?!!),而不是?(...)。
此外,使用默認TRE庫的grepl不支持lookaround,你需要傳遞perl=TRUE。
你可以使用
data <- data. frame(id = c(1。 2。 2,3。 3,4),
old_levels = c(0。 1, 1, 1,1。 2),
級別 = c(1。 2, 3, 2,3。 4),
描述 = c("蔬菜"。
"肉", "肉"。 "soda"),
模式 = c("蔬菜",)
"水果",
"^(?!.*(?:蔬菜|水果))",
"水果",
"^(?!.*(?:蔬菜|水果))",
NA))
data %>% rowwise() %> % mutate(matches = grepl(pattern。 description, perl=TRUE))
輸出:
>/span> data %> % rowwise() %> % mutate(matches = grepl(pattern。 description, perl=TRUE))
# A tibble: 6 x 6
# 排列方式。
id old_levels levels description pattern matches
<dbl> < dbl> <dbl> <chr> < chr> <lgl>/span>
1 1 0 1 蔬菜蔬菜 TRUE
2 2 1 2 水果水果 TRUE
3 2 1 3果^(? !。 *(? :蔬菜|水果)) FALSE
4 3 1 2 肉類水果 FALSE
5 3 1 3肉 ^(? !。 *(? :蔬菜|水果)) TRUE6 4 2 4 soda < NA> NA
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/322206.html
標籤:
