【问题标题】:Problems with casting a dataframe with text columns使用文本列投射数据框的问题
【发布时间】:2025-11-22 16:40:01
【问题描述】:

我有这个文本数据框,所有列都是字符向量。

    Gene.ID                     barcodes              value
    A2M          TCGA-BA-5149-01A-01D-1512-08        Missense_Mutation
   ABCC10        TCGA-BA-5559-01A-01D-1512-08        Missense_Mutation
   ABCC11        TCGA-BA-5557-01A-01D-1512-08        Silent
   ABCC8         TCGA-BA-5555-01A-01D-1512-08        Missense_Mutation
   ABHD5         TCGA-BA-5149-01A-01D-1512-08        Missense_Mutation
   ACCN1         TCGA-BA-5149-01A-01D-1512-08        Missense_Mutation

如何使用 reshape/reshape 2 从中构建数据框,以便获得格式为 Gene.ID~barcodes 的数据框,值是每个值列中的文本和“NA”或“WT”填充物?

默认聚合函数一直默认为长度,我想尽可能避免。

【问题讨论】:

  • 我并不完全按照你的想法去做,也许是因为我不经常使用 reshape/reshape2。您是否尝试以具有gene.id、barcodes、missense_mutation、silent 等变量的形式获取数据?
  • 我正在尝试获取一个数据框,其中包含列中的条形码和行中的gene.ID,其中“值”是每个单元格的值。如果特定基因/条形码组合缺少值,我希望它是“WT”或“NA”。
  • 您的“Gene.ID”或“barcodes”列中是否有重复值?
  • 是的,阿难。一些基因在不止一个样本中发生突变。但是,iacobus 提出了一个解决方案,这意味着这不是问题。

标签: r reshape reshape2


【解决方案1】:

我认为这将解决您的问题。首先,我正在生成一些类似于您的数据。为了简单起见,我将gene.idbarcode 作为一个因素,这应该与您的数据相同。

geneNames <- c(paste("gene", 1:10, sep = ""))
data <- data.frame(gene = as.factor(c(1:10, 1:4, 6:10)),
                   express = sample(c("Silent", "Missense_Mutation"), 19, TRUE),
                   barcode = as.factor(c(rep(1, 10), rep(2, 9))))

我制作了一个向量geneNames 一个基因名称的向量(例如,A2M)。为了在那些缺少给定基因的表达中获得NA 值,您需要合并数据,以便您拥有 number_of_genes by number_of_barcodes 行。

geneID <- unique(data$gene)
data2 <- data.frame(barcode = rep(unique(data$barcode), each = length(geneID)),
                    gene = geneID)
data3 <- merge(data, data2, by = c("barcode", "gene"), all.y = TRUE)

现在熔化和铸造数据,

library(reshape)
mdata3 <- melt(data3, id.vars = c("barcode", "gene"))
cdata <- cast(mdata3, barcode ~ variable + gene, identity)
names(cdata) <- c("barcode", geneNames)

然后您应该有一个包含 number_of_barcodes 行和 (number_of_unique_genes + 1) 列的数据框。每列应包含该特定样本条形码中该特定基因的表达信息。

【讨论】: