R -只识别列中以A和B结尾的字符串



我在R中包含样本名称的数据框架中有一列。除了以A或B结尾外,有些名称是相同的,有些示例重复自己,如下所示:

df <- data.frame(Samples = c("S_026A", "S_026B", "S_028A", "S_028B", "S_038A", "S_040_B", "S_026B", "S_38A"))

我要做的是隔离所有末尾有A和B的样本名称,而不包括只有A或B的样本名称。

我正在寻找的最终结果看起来像这样:"S_026"one_answers";S_028"因为只有这些字母的末尾有A和B。

我似乎只能找到如何删除重复项,而删除重复项只会给我带来"one_answers";S_38A"在本例中

或者,我试着在末尾去掉A和B,然后求和每个名字的总和>但是,这并没有给我想要的结果。

有什么建议吗?

我们可以使用substring获取不包含最后一个字符的子字符串分组后的最后一个字符,并检查子字符串

中是否同时存在'A'和'B'
library(dplyr)
df %>% 
group_by(grp = substr(Samples, 1, nchar(Samples)-1)) %>% 
filter(all(c("A", "B") %in% substring(Samples, nchar(Samples)))) %>% 
ungroup %>% 
select(-grp)

与产出

# A tibble: 5 x 1
Samples
<chr>  
1 S_026A 
2 S_026B 
3 S_028A 
4 S_028B 
5 S_026B 

您可以在不同的列中提取Sample的最后一个字符,只保留同时具有'A''B'的值,并且只保留唯一的值。

library(dplyr)
library(tidyr)
df %>%
extract(Samples, c('value', 'last'), '(.*)(.)') %>%
group_by(value) %>%
filter(all(c('A', 'B') %in% last)) %>%
ungroup %>%
distinct(value)
#  value
#  <chr>
#1 S_026
#2 S_028

相关内容

最新更新