Вы можете использовать пакет dplyr.
Создать тестовую таблицу:
names = c("ensembltranscript_id", "gene_name", "NumReads")
transcripts = c("ENST00000482226.2", "ENST00000508651.1", "ENST00000571914.1", "ENST00000571707.1", "ENST00000534817.1")
gene_names = c("FCGR2C", "FCGR2C", "TSPAN10", "TSPAN10", "OVCH2")
reads = c(205.56, 456.21, 123.3, 52.6, 268.45)
data = data.frame(transcripts, gene_names, reads)
names(data) = names
Выполнить расчет:
result = data %>%
group_by(gene_name) %>%
summarise(sum(NumReads)) %>%
mutate_if(is.numeric, format, 2)
Распечатать результат:
# A tibble: 3 x 2
gene_name `sum(NumReads)`
<fct> <chr>
1 FCGR2C 661.77
2 OVCH2 268.45
3 TSPAN10 175.90
Надеюсь, это поможет.
Редактировать:
Как указано в комментариях к ОП, ожидаемый результат поможет.Извините, может быть, я неправильно понял «коллапс» в этом контексте.Моя интерпретация заключается в суммировании операций чтения по имени гена.
Edit2:
Как уже упоминалось в моем комментарии, постарайтесь не предоставлять ссылки.Ссылки могут быть неработающими и т. Д. Для получения подробных инструкций о том, как написать хороший пост, см. здесь .
Однако, исходя из ваших реальных данных, сделайте следующее:
Загрузитьданные:
salmon_reads = read.table(file = "/path/to/Salmon_output.txt", header = T, sep = "\t")
genes = read.table(file = "/path/to/Converting_transcript_id_to_gene_id.txt", header = T, sep = "\t")
Просто объедините данные с помощью там транскрипта-идентификатора:
merged_data = merge(x = salmon_reads, y = genes, by.x = colnames(salmon_reads)[1], by.y = colnames(genes)[1], all = T)
Выполните расчет и порядок уменьшения:
result = merged_data %>%
group_by(external_gene_name) %>%
summarise(sum(NumReads)) %>%
mutate_if(is.numeric, format, 2)
result$`sum(NumReads)` = as.numeric(result$`sum(NumReads)`)
result = result[order(result$`sum(NumReads)`, decreasing = T),]
Выне упомянул, как обращаться с НС.В этом сценарии все чтения для имен генов, которые являются NA, суммируются.Вот почему в АН больше всего читается.