У меня есть несколько фреймов данных, которые выглядят так (сокращенно):
ref perc_fragments rank_code scientific_name
Sample1 73.43 S Escherichia coli
Sample1 2.10 S1 Escherichia coli P12b
Sample1 1.40 S2 Escherichia coli CFT073
Sample1 0.70 S1 Escherichia coli O6:H16
Sample1 1.40 S Klebsiella pneumoniae
Sample1 0.70 S Shigella dysenteriae
Sample1 1.40 S Staphylococcus aureus
Sample1 1.40 S1 S. aureus xyz
Что я хочу сделать, так это суммировать perc_fragments для всех строк в одной группе. Первый S
в столбце rank_code
начинает группу, и все S1
или S2
после этого являются частью этой группы, пока не встретится новый S
. В приведенном выше случае первые четыре строки представляют собой одну группу, затем идут три строки с однорядными группами, а последние две строки представляют собой одну группу. Я хочу, чтобы в столбце научное_имя отображалось научное_имя строки S
для каждой группы с суммой S
и всех S1
в одной группе. Другими словами, это:
ref perc_fragments rank_code scientific_name
Sample1 77.63 S Escherichia coli
Sample1 1.40 S Klebsiella pneumoniae
Sample1 0.70 S Shigella dysenteriae
Sample1 2.8 S Staphylococcus aureus
Я пробовал несколько вещей, но простой grepl
не сработает, чтобы сгруппировать их вместе, так как scientific_name
может немного отличаться для S1
строк.
Тестовые данные:
structure(list(ref = c("Sample1", "Sample1", "Sample1", "Sample1",
"Sample1", "Sample1", "Sample1", "Sample1", "Sample1", "Sample1",
"Sample1", "Sample1", "Sample1", "Sample1", "Sample1", "Sample1",
"Sample1", "Sample1", "Sample1", "Sample1", "Sample1"), perc_fragments = c("73.43",
"2.10", "1.40", "0.70", "1.40", "0.70", "0.70", "0.70", "0.70",
"0.70", "0.70", "0.70", "0.70", "0.70", "0.70", "1.40", "0.70",
"0.70", "0.70", "1.40", "1.40"), rank_code = c("S", "S1", "S1",
"S2", "S1", "S1", "S1", "S1", "S1", "S2", "S1", "S1", "S1", "S1",
"S1", "S", "S", "S", "S", "S", "S1"), scientific_name = c("Escherichia coli",
"Escherichia coli P12b", "Escherichia coli O157:H7", "Escherichia coli O157:H7 str. SS17",
"Escherichia coli CFT073", "Escherichia coli O6:H16", "Escherichia coli APEC IMT5155",
"Escherichia coli UM146", "Escherichia coli C", "Escherichia coli ATCC 8739",
"Escherichia coli FAP1", "Escherichia coli O27:H7", "Escherichia coli IAI1",
"Escherichia coli O127:H6", "Escherichia coli PCN061", "Klebsiella pneumoniae",
"Klebsiella variicola", "Citrobacter freundii", "Shigella dysenteriae",
"Staphylococcus aureus", "Staphylococci haemolyticus"
)), row.names = c(NA, -21L), class = c("tbl_df", "tbl", "data.frame"
))
cumsum
! 10.03.2021