筛选/子集/删除R中字符串中间包含字符的行

筛选/子集/删除R中字符串中间包含字符的行,r,R,我有一个数据框,其中有一列包含肽序列,我只想保留字符串中没有内部“R”或“K”的行 df1 <- data.frame( Peptide = c("ABCOIIJUHFSAUJHR", "AOFIAUKOAISDFUK", 'ASOIRDFHAOHFKK')) df1 #check output df1我们可以跳过第一个和最后一个字符(^.,$),在grep中匹配零个或多个非R或K([^RK]*)的字符,并使用这些字符对数据集进行子集化 df1[grepl("^.[^RK]*

我有一个数据框,其中有一列包含肽序列,我只想保留字符串中没有内部“R”或“K”的行

df1 <- data.frame(
    Peptide = c("ABCOIIJUHFSAUJHR", "AOFIAUKOAISDFUK", 'ASOIRDFHAOHFKK'))


df1 #check output

df1我们可以跳过第一个和最后一个字符(
^.
$
),在
grep
中匹配零个或多个非R或K(
[^RK]*
)的字符,并使用这些字符对数据集进行子集化

df1[grepl("^.[^RK]*.$", df1$Peptide), , drop = FALSE]
#           Peptide
#1 ABCOIIJUHFSAUJHR

以下是
dplyr
解决方案:
str\u locate
是相当于
grepl
的tidyverse,因此代码如下所示:

df2 <- df1 %>%
  filter(Peptide %>% str_detect("^.[^RK]*.$"))
df2%
过滤器(肽%>%str\u检测(“^.[^RK]*.$”)

边缘大小写:单个字符串:
grepl(“^.[^RK]*.$”,“A”)
@Frank这是一个很好的例子。我想我们必须为那些边缘情况做一个
“^[^R|K]*。$”
是我最后使用的(我删除了
(句号),因为我意识到我实际上一开始也想过滤掉K | R。谢谢!我最后使用了
dplyr::filter(肽%>%str\u detect(^[^R|K]*。$)
(因为我还想过滤掉字符串开头的R | K(见我上面的评论)。我自己对胰蛋白酶比较熟悉,我想这是你想要的,但它接受了所有3个肽,而我没有在开头包含
^.
。很高兴你让它起作用了!