R - 仅识别列中以 A 和 B 结尾的字符串
R - Identifying only strings ending with A and B in a column
我在 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”和“S_028”,因为它们是仅有的以 A 和 B 结尾的。
我似乎找到的只是如何删除重复项,在这种情况下,删除重复项只会给我“S_026B”和“S_38A”。
或者,我尝试去掉末尾的 A 和 B,然后将这些名称中的每一个的总和 > 2 的次数相加,但同样,这并没有给我想要的结果。
有什么建议吗?
我们可以用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
我在 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”和“S_028”,因为它们是仅有的以 A 和 B 结尾的。
我似乎找到的只是如何删除重复项,在这种情况下,删除重复项只会给我“S_026B”和“S_38A”。
或者,我尝试去掉末尾的 A 和 B,然后将这些名称中的每一个的总和 > 2 的次数相加,但同样,这并没有给我想要的结果。
有什么建议吗?
我们可以用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