删除字符串中除所需单词(包括R中的某些模式)以外的其他单词

删除字符串中除所需单词(包括R中的某些模式)以外的其他单词,r,R,我有一个包含特定字符串的向量,我想删除每个字符串中除了包含特定模式的单词以外的其他部分(这里是mir) s以R为底的一种方法是将每个字符串拆分为单词,然后只提取其中包含mir的字符串 unlist(lapply(strsplit(s, " "), function(x) grep("mir", x, value = TRUE))) #[1] "mir-96" "mir-133a" "mir-14-3p" "mir133" "mir_23_5p" 我们可以使用@Rich Scriv

我有一个包含特定字符串的向量,我想删除每个字符串中除了包含特定模式的单词以外的其他部分(这里是
mir


s以R为底的一种方法是将每个字符串拆分为单词,然后只提取其中包含
mir
的字符串

unlist(lapply(strsplit(s, " "), function(x) grep("mir", x, value = TRUE)))
#[1] "mir-96"    "mir-133a"  "mir-14-3p" "mir133"    "mir_23_5p"
我们可以使用@Rich Scriven在注释中建议的
sapply
保存
unlist
步骤

sapply(strsplit(s, " "), function(x) grep("mir", x, value = TRUE))

我们可以使用
sub
匹配零个或多个字符(
*
),后面是单词边界(
\\b
),后面是字符串(
mir
)和一个或多个非空白字符(
\\S+
),将其作为一个组放置在
(…)
后跟其他字符,并在替换中使用捕获组的反向引用(
\\1

更新 如果有多个子字符串'mir.*',那么我们希望提取具有数字部分的字符串

sub(".*\\b(mir[^0-9]*[0-9]+\\S*).*", "\\1", s1)
#[1] "mir-96"    "mir-133a"  "mir-14-3p" "mir133"    "mir_23_5p" "mir_23-5p"
数据
s1如果
s
sub(".*\\b(mir[^0-9]*[0-9]+\\S*).*", "\\1", s1)
#[1] "mir-96"    "mir-133a"  "mir-14-3p" "mir133"    "mir_23_5p" "mir_23-5p"
s1 <- c("a mir-96 line (kk27)", "mir-133a cell", "d mir-14-3p in", "m mir133 (sas)", 
                                            "mir_23_5p r 27", "a mir_23-5p 1 mir-net")