Как получить среднее значение для каждого столбца для каждого гена в R?
Я работаю с фреймом данных в R, начиная следующим образом:
> head(renamed.Mc.Cd.Ni[2:6])
s_MC13_B2_Cd.Ni s_MC13_B3_Cd.Ni s_MC13_B4_Cd.Ni GENE_ID
9.854759 10.216916 9.722329 GENE:JGI_V11_100009
7.863938 8.075640 7.894878 GENE:JGI_V11_100009
9.448034 9.177245 9.053654 GENE:JGI_V11_100036
9.333245 9.208673 9.159947 GENE:JGI_V11_100036
9.360540 9.374757 9.273236 GENE:JGI_V11_100036
8.983222 9.023339 9.112987 GENE:JGI_V11_100044
Как вы можете видеть, у меня есть три столбца, которые дают значение экспрессии гена для 3 разных дафний во время лечения. Последний столбец представляет экспрессируемый ген. Тем не менее, существует более одной строки для каждого гена из-за использования нескольких зондов. Как получить среднее значение для каждого гена для каждой дафнии (столбцы 1-3)?
Например, для каждой из трех дафний (столбцы с 1 по 3) я хочу получить общую среднюю экспрессию гена для каждого гена, показанного в столбце 4. Я не могу сделать это вручную, поскольку у меня более 60000 значений экспрессии генного зонда.
Заранее спасибо!
1 ответ
Похоже, ваш вопрос прост в понимании групповой проблемы, на SO уже есть несколько примеров... так что это дубликат, но это аккуратный подход к решению вашей проблемы.
library(dplyr)
df <- read.table(text = "
s_MC13_B2_Cd.Ni s_MC13_B3_Cd.Ni s_MC13_B4_Cd.Ni GENE_ID
9.854759 10.216916 9.722329 GENE:JGI_V11_100009
7.863938 8.075640 7.894878 GENE:JGI_V11_100009
9.448034 9.177245 9.053654 GENE:JGI_V11_100036
9.333245 9.208673 9.159947 GENE:JGI_V11_100036
9.360540 9.374757 9.273236 GENE:JGI_V11_100036
8.983222 9.023339 9.112987 GENE:JGI_V11_100044
", header = TRUE, stringsAsFactors = FALSE)
df %>%
group_by(GENE_ID) %>%
summarise_if(is.numeric, mean)
# # A tibble: 3 x 4
# GENE_ID s_MC13_B2_Cd.Ni s_MC13_B3_Cd.Ni s_MC13_B4_Cd.Ni
# <chr> <dbl> <dbl> <dbl>
# 1 GENE:JGI_V11_100009 8.86 9.15 8.81
# 2 GENE:JGI_V11_100036 9.38 9.25 9.16
# 3 GENE:JGI_V11_100044 8.98 9.02 9.11