我有一個包含病人地址的字串變數。我的目標是標記住在 "401 30th street "的病人。我想標記在 "30 "之前包含數字 "401 "的字串,以避免標記像數字3這樣的地址。我下面的代碼只標記字串是否包含數字401和30,而不管它們的位置如何。如果有任何幫助,我將不勝感激。
ADDRESS
1 401 30st st.
2 40120 30 Street
3 30 401 st
4 401 30thst
structure(list(ADDRESS = c("401 30th st"/span>。 "40120 30 street", "40120 30 street"?
"30 401 st", "401 30 st"))。 class = "data. frame",行。 names = c(NA,)
-4L))
loction <- location %>%
mutate(ADDRESS = tolower(ADDRESS),
st30 = grepl("`<401`> ",ADDRESS) &
grepl("<30>|<30st>|<e30th>|<。 e30gt;",ADDRESS))
uj5u.com熱心網友回復:
嘗試用
library(dplyr)
library(stringr)
位置%>%
mutate(flag = str_detect(ADDRESS, '401. *30'))
uj5u.com熱心網友回復:
你可以嘗試這樣做:
library(dplyr)
library(stringr)
位置%>%
mutate(flag =str_detect(ADDRESS, '^[^30]*401 . *30.*$'))
輸出:
ADDRESS flag
1 401 30th st TRUE
2 40120 30 street FALSE
3 30 401 sta FALSE
4 401 30st TRUE
uj5u.com熱心網友回復:
當你使用兩個獨立的grepl呼叫時,無論它們在字串中出現的順序如何,都會搜索到匹配的內容。
按順序處理兩個子字串意味著
- 匹配左邊的子字串。
- 匹配最左邊的模式 。
- 用
.*、.*?、[sS]*?、(?s:.)*?(后兩者符合PCRE/ICU標準)等模式匹配任何字符(因為重組引擎必須以某種方式到達第二個模式)。 - 匹配最右邊的模式。
因此,在這里,由于輸入中沒有換行符,你可能可以使用
df %>%
mutate(st30 =grepl('401. *?30',ADDRESS))
然而,上面的401和30模式在任何情況下都可以匹配。如果你想把它們作為精確的整數值來匹配,你需要使用numeric邊界:
grepl('(?<!d)401(?!d).*? (?<!d)30(?! d)',ADDRESS,perl=TRUE)
也許,你也可以在這些數字模式的開始處使用簡單的字界(即在它們之前,不允許使用字母、數字或下劃線):
grepl('401(?!d) .*?30(?! d)', ADDRESS, perl=TRUE)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/322187.html
標籤:
上一篇:如何使用小冊子地圖的嵌套模塊
