【问题标题】:Collapse doubles in variable names折叠变量名中的双精度
【发布时间】:2015-05-18 11:27:11
【问题描述】:

我有一个基因名称矩阵,其中包含不同组织中的表达值。然而,分析是独立进行的,并非所有基因都存在于所有组织中。每个组织的基因列表简单地粘贴在彼此的下方。现在它看起来像这样:

 GeneName   Tissue A Tissue B
Gene A  1------------
Gene B  1------------
Gene C  2-----------
Gene A ---------3
Gene D ----------2

我想折叠基因名称倍数,以便得到如下矩阵:

GeneName   Tissue A Tissue B
Gene A 1---------3
Gene B 1---------
Gene C 2----------
Gene D ---------2

编辑:感谢您的回答。但是,我错过了添加基因名称是它们自己的列,而行名称只是数字 1-n。我尝试将名称列设置为行名称row.names(mydataframe)<-mydataframe$GeneName,但收到以下错误消息Error inrow.names(tmp, value = c(578L, 510L, 1707L, : duplicate 'row.names' are not allowed In addition: Warning message: non-unique values when setting 'row.names': 据我了解,我不能使用具有非唯一值的列作为行名,如果我需要在基因名称列之后命名行以便能够折叠矩阵,这似乎让我陷入困境 22?

【问题讨论】:

  • 你有那些缺失的插槽的 NA 值
  • 最好在终端或 Rstudio 中显示问题中的矩阵/数据帧。为什么Gene D在输出中变成了3?
  • @RuthgerRighart 我认为这是一个错字
  • 我更新了帖子。关于警告消息,“data.frame”不能有重复的行名。您需要将其转换为矩阵(尽管您的原始描述将其称为矩阵)

标签: r


【解决方案1】:

假设缺失值是“NA”,而“Gene D”输出中的“Tissue.B”值为 2,您可以使用

 res <- rowsum(m1, row.names(m1), na.rm=TRUE)
 is.na(res) <- res==0
 res
 #       Tissue.A Tissue.B
 #Gene A        1        3
 #Gene B        1       NA
 #Gene C        2       NA
 #Gene D       NA        2

如果它是一个以'GeneName'为列的data.frame

 library(dplyr)
 df1 %>%
    group_by(GeneName) %>% 
    summarise_each(funs(sum=sum(., na.rm=TRUE)))
 #    GeneName Tissue.A Tissue.B
 #1   Gene A        1        3
 #2   Gene B        1        0
 #3   Gene C        2        0
 #4   Gene D        0        2

我们可以像以前一样用NA 替换0

或者使用来自base Raggregate

  aggregate(.~GeneName, df1, sum, na.rm=TRUE, na.action=NULL)

数据

 m1 <- structure(c(1L, 1L, 2L, NA, NA, NA, NA, NA, 3L, 2L), .Dim = c(5L, 
 2L), .Dimnames = list(c("Gene A", "Gene B", "Gene C", "Gene A", 
"Gene D"), c("Tissue.A", "Tissue.B")))

 df1 <- structure(list(GeneName = c("Gene A", "Gene B", "Gene C",
  "Gene A", 
 "Gene D"), Tissue.A = c(1L, 1L, 2L, NA, NA), Tissue.B = c(NA, 
 NA, NA, 3L, 2L)), .Names = c("GeneName", "Tissue.A", "Tissue.B"
 ), class = "data.frame", row.names = c(NA, -5L))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    相关资源
    最近更新 更多