R Группировка данных из фреймов данных для анализа данных - PullRequest
0 голосов
/ 17 апреля 2020

Мне нужна помощь с этим, потому что я не знаю, как справиться с этим. У меня есть 2 кадра данных, они выглядят так:

(df1) DataGenSample: каждый столбец - это образец, а первый - это ген

enter image description here

(df2) Подтипы: df из 2 столбцов, 1-й столбец - образец, а 2-й столбец - подтип рака

enter image description here

Первое, что мне нужно, это выбрать только подходящие образцы DataGenSample из подтипов, а затем отделить их подтипом.

Файлы данных можно найти здесь

Любая помощь приветствуется! потому что я потерян.

DataGenSample <- read.table("DataGenSample.txt",sep="\t", header=TRUE, check.names = FALSE)
Subtypes <- read.table("SamplesType.txt",sep="\t", header=TRUE, check.names = FALSE)

Небольшой пример: df1:

hugo_symbol   TCGA-3C-AAAU-01    TCGA-3C-AALI-01    TCGA-3C-AALJ-01 ... TCGA-3C-AALL-99
CDK11A               0                 -1                -1         ...     -1
HNRNPR               0                 -1                -1         ...     -1
SRSF10               0                 -1                -1         ...     -1

df2:

Sample_id            Subtype
TCGA-3C-AAAU-01        BRCA_LumA
TCGA-3C-AALI-01        BRCA_Her2
TCGA-3C-AALL-99        BRCA_Normal

Ожидаемый результат:

-BRCA_LumA.df:

hugo_symbol   TCGA-3C-AAAU-01    
CDK11A               0              
HNRNPR               0              
SRSF10               0                

-BRCA_Her2.df:

hugo_symbol   TCGA-3C-AALI-01   
CDK11A               -1              
HNRNPR               -1              
SRSF10               -1   

-BRCA_Normal.df:

hugo_symbol   TCGA-3C-AALL-99   
CDK11A               -1              
HNRNPR               -1              
SRSF10               -1   

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

Если я правильно понимаю, вы хотите выбрать поднабор столбцов из DataGenSample, соответствующий определенному подтипу в подтипах. Это может быть достигнуто путем поворота столбцов в строки, используя pivot_longer() из пакета tidyr (имя было gather() в более старых версиях). После разворота вы можете объединить два фрейма данных в SAMPLE_ID.

Теперь вы можете фильтровать по подтипу, а SAMPLE_ID (теперь их меньше) можно поворачивать обратно к столбцам. Вы можете сделать это для всех подтипов отдельно, используя для l oop, используя assign() для присвоения имени фрейму данных в соответствии с подтипом в фильтре.

library(dplyr)
library(tidyr)

DataGenSample_long <- DataGenSample %>% 
  pivot_longer(names_to = 'SAMPLE_ID', values_to = 'value', cols = -Hugo_Symbol) 

DataGenSample_long_join <- DataGenSample_long %>% 
  left_join(Subtypes, by = 'SAMPLE_ID')

for (Subtype in unique(Subtypes$SUBTYPE)) {
  assign(paste0(Subtype,'.df'), 
         DataGenSample_long_join %>% 
           filter(SUBTYPE == Subtype) %>% 
           select(-SUBTYPE) %>% 
           pivot_wider(names_from = SAMPLE_ID, values_from = value))
}
1 голос
/ 17 апреля 2020

Если нам нужно создать list из data.frame s на основе 'Subtype', мы можем сделать split из 'Sample_id' в 'Subtype' в list из vector s, используйте эти имена для выбора столбцов первого набора данных вместе с 'hugo_symbol'

lst1 <-  lapply(split(df2$Sample_id, df2$Subtype), 
         function(nm) df1[c("hugo_symbol", nm)])
lst1
#$BRCA_Her2
#  hugo_symbol TCGA-3C-AALI-01
#1      CDK11A              -1
#2      HNRNPR              -1
#3      SRSF10              -1

#$BRCA_LumA
#  hugo_symbol TCGA-3C-AAAU-01
#1      CDK11A               0
#2      HNRNPR               0
#3      SRSF10               0

#$BRCA_Normal
#  hugo_symbol TCGA-3C-AALL-99
#1      CDK11A              -1
#2      HNRNPR              -1
#3      SRSF10              -1

data

df1 <- structure(list(hugo_symbol = c("CDK11A", "HNRNPR", "SRSF10"), 
    `TCGA-3C-AAAU-01` = c(0L, 0L, 0L), `TCGA-3C-AALI-01` = c(-1L, 
    -1L, -1L), `TCGA-3C-AALJ-01` = c(-1L, -1L, -1L), `TCGA-3C-AALL-99` = c(-1L, 
    -1L, -1L)), class = "data.frame", row.names = c(NA, -3L))

df2 <- structure(list(Sample_id = c("TCGA-3C-AAAU-01", "TCGA-3C-AALI-01", 
"TCGA-3C-AALL-99"), Subtype = c("BRCA_LumA", "BRCA_Her2", "BRCA_Normal"
)), class = "data.frame", row.names = c(NA, -3L))
...