我需要帮助,因为我不知道如何处理。我有2个数据框,它们看起来像这样:
[(df1)DataGenSample:每列都是一个样本,第一个是基因]
[(df2)子类型:2列的df,第一个col是样品,第二个col是癌症的亚型
我正在寻找的第一件事是从子类型中仅选择匹配的DataGenSample样本,然后用其子类型将它们分开。
可以找到数据文件here
欢迎任何帮助!因为我迷路了。
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
如果我理解正确,您想从DataGenSample中选择与子类型中某个子类型相对应的列子集。这可以通过使用tidyr软件包中的pivot_longer()
将列旋转为行来实现(旧版本中的名称为gather()
)。进行数据透视之后,您可以将两个数据帧合并到SAMPLE_ID上。
您现在可以按子类型进行过滤,并且SAMPLE_ID(现在数量已减少)可以转回到列中。您可以使用for循环对所有子类型分别执行此操作,并使用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))
}
如果我们需要基于'Subtype'创建list
的data.frame
,则可以将'Subtype'的'Sample_id'的split
创建为list
s的vector
,请使用该名称以选择第一个数据集的列以及'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
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))