R 对来自数据帧的数据进行分组以进行数据分析
R Grouping data from dataframes for data analysis
我需要帮助,因为我不知道如何处理。我有 2 个数据框,它们看起来像这样:
(df1) DataGenSample: 每列是一个样本,第一列是基因
(df2) 子类型:2 列的 df,第 1 列是样本,第 2 列是癌症的亚型
我要查找的第一件事是 select 仅从子类型中匹配 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
如果我们需要基于 'Subtype' 创建一个 list
of data.frame
,我们可以通过 [= 创建一个 split
of 'Sample_id' 21=] 到 vector
的 list
中,使用该名称来 select 第一个数据集的列以及 '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))
如果我理解正确,您希望 select DataGenSample 中的列子集对应于子类型中的某个子类型。这可以通过使用 tidyr 包中的 pivot_longer()
将列旋转到行来实现(名称在旧版本中为 gather()
)。在枢轴之后,您可以在 SAMPLE_ID 上连接两个数据框。
您现在可以过滤子类型,SAMPLE_IDs(现在数量减少)可以旋转回列。
您可以使用 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))
}
我需要帮助,因为我不知道如何处理。我有 2 个数据框,它们看起来像这样:
(df1) DataGenSample: 每列是一个样本,第一列是基因
(df2) 子类型:2 列的 df,第 1 列是样本,第 2 列是癌症的亚型
我要查找的第一件事是 select 仅从子类型中匹配 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
如果我们需要基于 'Subtype' 创建一个 list
of data.frame
,我们可以通过 [= 创建一个 split
of 'Sample_id' 21=] 到 vector
的 list
中,使用该名称来 select 第一个数据集的列以及 '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))
如果我理解正确,您希望 select DataGenSample 中的列子集对应于子类型中的某个子类型。这可以通过使用 tidyr 包中的 pivot_longer()
将列旋转到行来实现(名称在旧版本中为 gather()
)。在枢轴之后,您可以在 SAMPLE_ID 上连接两个数据框。
您现在可以过滤子类型,SAMPLE_IDs(现在数量减少)可以旋转回列。
您可以使用 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))
}