Используйте отдельный фрейм данных для назначения групп другому фрейму данных - PullRequest
0 голосов
/ 13 июля 2020

В настоящее время я работаю с данными geneti c, где заголовки - это имена образцов ячеек. От каждого типа клеток собрано по 2 образца, и их необходимо отобразить в виде прямоугольной диаграммы. Из-за несогласованности именования образцов я использую отдельный файл .csv, в котором пользователь записывает имя образца и группу, к которой он принадлежит. Я пытаюсь использовать функцию group_by() для доступа к образцам данных, но затем использую информацию о группировке из другого файла .csv. Есть ли способ выполнить sh то, что я пытаюсь сделать?

Cell Sample Data CSV:                     
Sample A1         Sample A2    Sample B1     Sample B2
1                 3            3             5
Grouping CSV
Samples           Group     
Sample A          1           
Sample B          1           
Sample C          2
Sample D          2

Моя текущая идея делать что-то вроде этого

library(dplyr)
groupFile <- data %>% group_by(groupFile$Group)

, но этого не произошло работают, и я застрял в том, как привести данные в соответствие с файлом группировки.

Примечание: я ранее загружал этот вопрос без образцов данных и кода, и он был закрыт. Я надеюсь, что это достаточно хорошо описывает проблему.

1 Ответ

0 голосов
/ 13 июля 2020

Сначала давайте улучшим данные образца ячейки вашего примера, включив образцы, которые находятся в разных группах:

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()

введите описание изображения здесь

...