【问题标题】:Reshaping data with missing values使用缺失值重塑数据
【发布时间】:2014-09-29 15:36:29
【问题描述】:

我有一个与此类似的数据集...

Id 疾病基因突变表达 101 疾病_X基因_A R273G 正常 101 疾病_X GENE_B G12D 正常 102 疾病_Y GENE_C L858R 高

我想重塑它,使每个 id 和基因对都代表“突变”和“表达”,即使不存在任何值。

例如,每个 id-gene 对将有 6 个可能的值(3 个基因用于突变,3 个基因用于表达),如果原始表中没有突变或表达的值,则输出将为缺失提供一些标准输出填充该行的数据(例如“无突变数据”)。表格输出如下所示:

Id 疾病类型 基因值 101疾病_X突变基因A R273G 101 疾病_X 基因 B G12D 突变 101 疾病_X 突变基因 C 无突变数据 101 疾病_X表达基因A正常 101 疾病_X 表达基因 B 正常 101 疾病_X 表达基因 C 无表达数据 102 疾病_Y 突变基因 A 无突变数据 102 疾病_Y 突变基因 B 无突变数据 102 疾病_Y 突变基因 C L858R 102 疾病_Y 表达基因 A 无表达值 102 疾病_Y 表达基因 B 无表达值 102 疾病_Y 表达基因 C 高

我知道有一种简单的方法可以做到这一点(使用合并或融化?),但我还没有想出任何简单的方法。

【问题讨论】:

  • 是否可以与(例如)dput(head(mydata)) 共享此输入的可重现版本?也不清楚您所说的“丢失”是什么意思,因为您的示例输入中实际上没有丢失数据。你的意思是它有NA?
  • 我在电子表格上从头开始创建这个模型只是为了举例,所以我在 R 中没有,但我可以做到...
  • 了解原始电子表格中“无价值”的具体含义会很有帮助(您的意思是 NA 吗?)事实上,仅使用 reshape2 的 melt 功能即可让您非常接近这一点开箱即用
  • 基本上这意味着我们得到的数据通常只突出那些有变化/改变的ids/genes。但我们也希望生成“正常”值的数据,以便生成视觉效果。不确定这是否有助于澄清这一点......
  • 您误解了我的问题:我问的是您的实际 R 输入没有价值是什么意思。您上面的示例没有丢失数据的示例。你的意思是数据集中有 NA 吗? (我不是在问那些 NA 代表什么)。

标签: r


【解决方案1】:

您需要执行一些额外的步骤才能获得您想要的确切信息。

在下文中,我首先制作“Id”、“Type”和“Gene”的所有组合,将它们与数据集的“long”形式合并,然后修复“Disease”列。

我将NA 保留为NA,因为如果您需要做进一步的工作,这对我来说似乎更有意义。

这假设您从名为“mydf”的数据集开始。

library(data.table)
library(reshape2)

DT <- as.data.table(mydf)                                ## Convert to data.table
DTL <- melt(DT, id.vars = c("Id", "Disease", "Gene"))    ## Make it long
groups <- c("Id", "Gene", "variable")                    ## Save some typing
toMerge <- do.call(CJ, lapply(DTL[, groups,              ## Generate the combos
                                  with = FALSE], unique))
merged <- merge(DTL, toMerge, by = groups, all = TRUE)   ## merge
merged[, Disease := unique(na.omit(Disease)), by = Id][] ## Fill in Disease
#      Id   Gene   variable   Disease  value
#  1: 101 GENE_B   Mutation Disease_X   G12D
#  2: 101 GENE_B Expression Disease_X Normal
#  3: 101 GENE_C   Mutation Disease_X     NA
#  4: 101 GENE_C Expression Disease_X     NA
#  5: 101 Gene_A   Mutation Disease_X  R273G
#  6: 101 Gene_A Expression Disease_X Normal
#  7: 102 GENE_B   Mutation Disease_Y     NA
#  8: 102 GENE_B Expression Disease_Y     NA
#  9: 102 GENE_C   Mutation Disease_Y  L858R
# 10: 102 GENE_C Expression Disease_Y   High
# 11: 102 Gene_A   Mutation Disease_Y     NA
# 12: 102 Gene_A Expression Disease_Y     NA

【讨论】:

  • @user2900006,好的。如果它解决了您的问题,请考虑“接受”它。
  • 是的,解决了。我如何正式“接受”它。环顾四周寻找如何做到这一点......
  • @user2900006,我的答案左边应该是一个空心的复选标记等待被点击;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2016-02-11
  • 2016-04-25
  • 1970-01-01
  • 2014-04-22
  • 2016-01-22
相关资源
最近更新 更多