Мы можем сгруппировать по 'Col1', получить sum
из 'Col2', где есть +
или -
, обернутые в ()
, и те без этих
library(dplyr)
library(stringr)
df1 %>%
group_by(Col1) %>%
summarise(Sum_minus_plus = sum(str_detect(Col2, "\\([+-]\\)")),
No_minus_plus = n() - sum(str_detect(Col2, '^Seq')))
# A tibble: 3 x 3
# Col1 Sum_minus_plus No_minus_plus
# <chr> <int> <int>
#1 Group1 4 3
#2 Group2 2 2
#3 Group3 2 1
данных
df1 <- structure(list(Col1 = c("Group1", "Group1", "Group1", "Group1",
"Group1", "Group1", "Group1", "Group2", "Group2", "Group2", "Group2",
"Group2", "Group3", "Group3", "Group3"), Col2 = c("Seq_1:(+)Sp1",
"Prot_1-A", "Seq_1:(-)Sp2", "Prot_1B", "Seq_2:(-)Sp2", "Seq_1:(+)Sp3",
"Prot_1C", "Seq_1:Sp5", "Prot_1-E", "Prot_1G", "Seq_2:(+)Sp5",
"Seq_1:(+)Sp6", "Seq_1:(-)Sp7", "Prot_1H-AB", "Seq_1:(+)Sp7 Prot_1Y"
)), class = "data.frame", row.names = c(NA, -15L))