Сначала давайте улучшим данные образца ячейки вашего примера, включив образцы, которые находятся в разных группах:
celldata <- structure(list(`Sample A1` = 1L, `Sample A2` = 3L, `Sample B1` = 3L,
`Sample B2` = 5L, `Sample C1` = 6L, `Sample C2` = 7L),
class = "data.frame", row.names = c(NA, -1L))
И данные ваших групп:
groupdata <- structure(list(Samples = c("Sample A", "Sample B", "Sample C", "Sample D"),
Group = c(1L, 1L, 2L, 2L)), class = "data.frame",
row.names = c(NA, -4L))
С данными жизнь станет намного проще в "длинном" формате, а не в широком, и со всем в одном фрейме данных.
Мы можем использовать tidyr::gather
для изменения формы данных ячейки, затем dplyr::mutate
, чтобы получить Samples
без числа c суффиксы и, наконец, dplyr::left_join
, чтобы объединить образцы и группы:
library(dplyr)
library(tidyr)
celldata %>%
gather(Sample, Value) %>%
mutate(Samples = gsub("\\d+", "", Sample)) %>%
left_join(groupdata)
Результат:
Sample Value Samples Group
1 Sample A1 1 Sample A 1
2 Sample A2 3 Sample A 1
3 Sample B1 3 Sample B 1
4 Sample B2 5 Sample B 1
5 Sample C1 6 Sample C 2
6 Sample C2 7 Sample C 2
Теперь вы можете группировать по Group
. В зависимости от того, что вы хотите сделать дальше, вы можете преобразовать Group
в коэффициент. А если вы используете ggplot2
, вам может даже не понадобиться group_by
.
Например:
library(ggplot2)
celldata %>%
gather(Sample, Value) %>%
mutate(Samples = gsub("\\d+", "", Sample)) %>%
left_join(groupdata) %>%
mutate(Group = factor(Group)) %>%
ggplot(aes(Group, Value)) +
geom_boxplot() +
geom_jitter(aes(color = Samples)) +
theme_bw()
введите описание изображения здесь