我有一个表达矩阵,也就是一个包含一些基因在不同人类样本中表达水平的矩阵,还有一些样本是重复的,所以我需要将这些重复中的表达组合起来,并计算出中位数。我将样本的名称作为行,在每一列中我有一个基因的表达。(我有大约200,000个基因,所以大约有200,000列)。第一列如下所示:
Adipocyte - breast, donor1
Adipocyte - breast, donor2
Adipocyte - omental, donor1
Adipocyte - omental, donor2
Adipocyte - omental, donor3
Alveolar Epithelial Cells, donor1
Alveolar Epithelial Cells, donor2
Amniotic Epithelial Cells, donor1
Amniotic Epithelial Cells, donor3其余的列对应于数字(不同基因的表达)。
所以我想我需要先写一个正则表达式,来获取那些在coma之前相等的行,这样它就可以捕捉到相同细胞类型的不同捐赠者,然后计算每个基因表达的中位数。
你有什么办法吗?
发布于 2015-12-13 03:48:11
这里有一个不太优雅的解决方案(主要是因为字符串拆分函数"strsplit"),但它不需要任何额外的包,而且更容易理解,因为R用户更熟悉语法(前一个解决方案是使用Hadley Wickham编写的包,我相信他使用的语法略有不同)。
# Dummy data
dat <- data.frame(tissue = c("Adipocyte - breast, donor1",
"Adipocyte - breast, donor2",
"Adipocyte - omental, donor1",
"Adipocyte - omental, donor2",
"Adipocyte - omental, donor3",
"Alveolar Epithelial Cells, donor1",
"Alveolar Epithelial Cells, donor2",
"Amniotic Epithelial Cells, donor1",
"Amniotic Epithelial Cells, donor3"),
val1 = rnorm(9),
val2 = rnorm(9),
val200000 = rnorm(9))
# Use "aggregate" function form the default "stats" package
aggregate(x = dat[2:ncol(dat)],
by = list(factor(do.call("c",
lapply(strsplit(x = as.character(dat$tissue),
split = ","),
function(a)a[1])))),
FUN = "median")https://stackoverflow.com/questions/34243634
复制相似问题