我在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
获取不包含最后一个字符的子字符串分组后的最后一个字符,并检查子字符串
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