R 替换字符串不像两个字符串?
R replace strings not like two strings?
我正在使用 R 中的 sub 函数来替换任何不以 M 开头或不以 T814 开头的字符串。我有下面的代码成功地保留了任何以 M 开头的字符串,但它没有保留以 T814 开头的字符串。
attempt2$dx3 <- sub('^[^M].*| ^[^T814].*', "", attempt2$dx3)
有什么方法可以调整代码以仅保留我感兴趣的字符串吗?
这是我所拥有的示例:
attempt2 <- data.frame(dx2 = c("M1234", "T8142", "M745", "T8149", "R234"),
dx3 = c("M356", "T1142", "M745", "T8146", "G234"))
以及我想要的:
attempt2 <- data.frame(dx2 = c("M1234", "T8142", "M745", "T8149", ""),
dx3 = c("M356", "", "M745", "T8146", ""))
由于您正在替换整个字符串,因此您可以检测匹配项,然后替换所有不匹配项:
attempt2$dx3[!grepl("^(M|T184)", attempt2$dx3)] <- ""
我认为另一种选择是消极的前瞻性,Wiktor 的评论可能是正确的。
使用str_detect
library(stringr)
library(dplyr)
attempt2 %>%
mutate(dx3 = replace(dx3, !str_detect(dx3, "^(M|T8146)"), ""))
有一个方便的库:
library(inops)
attempt2 %out~% c("^M", "^T814") <- ""
此处%out~%
匹配所有与右侧指定的正则表达式不匹配的元素。然后,您可以在行尾为该表达式分配一个替换值。
我正在使用 R 中的 sub 函数来替换任何不以 M 开头或不以 T814 开头的字符串。我有下面的代码成功地保留了任何以 M 开头的字符串,但它没有保留以 T814 开头的字符串。
attempt2$dx3 <- sub('^[^M].*| ^[^T814].*', "", attempt2$dx3)
有什么方法可以调整代码以仅保留我感兴趣的字符串吗?
这是我所拥有的示例:
attempt2 <- data.frame(dx2 = c("M1234", "T8142", "M745", "T8149", "R234"),
dx3 = c("M356", "T1142", "M745", "T8146", "G234"))
以及我想要的:
attempt2 <- data.frame(dx2 = c("M1234", "T8142", "M745", "T8149", ""),
dx3 = c("M356", "", "M745", "T8146", ""))
由于您正在替换整个字符串,因此您可以检测匹配项,然后替换所有不匹配项:
attempt2$dx3[!grepl("^(M|T184)", attempt2$dx3)] <- ""
我认为另一种选择是消极的前瞻性,Wiktor 的评论可能是正确的。
使用str_detect
library(stringr)
library(dplyr)
attempt2 %>%
mutate(dx3 = replace(dx3, !str_detect(dx3, "^(M|T8146)"), ""))
有一个方便的库:
library(inops)
attempt2 %out~% c("^M", "^T814") <- ""
此处%out~%
匹配所有与右侧指定的正则表达式不匹配的元素。然后,您可以在行尾为该表达式分配一个替换值。