【发布时间】:2016-06-24 20:09:12
【问题描述】:
我有一个矩阵,我想根据行均值将所有行分成 20 个箱。我可以按如下方式实现:
library(dplyr)
n_bins = 20
data$bin = ntile(rowMeans(data), n_bins)
现在,在每个 bin 内,我想对 bin 内所有行的离散度度量进行 z 归一化,以识别异常行。我想定义 z 分数截止值为 1.7 的异常值。我不确定是否有一种简单的方法可以解决这个问题,但我目前被困在这一点上。
编辑:
问题重新陈述/澄清:我有一个相当大的 data.frame,有 12374 行(基因)和 785 列(细胞)。我想根据 rowMeans 将行分组到 20 个箱中。在每个箱内,我想对该箱内所有基因的分散测量(方差/平均值)进行 z 归一化,以便识别其表达值高度可变的异常基因,即使与具有相似平均表达的基因相比也是如此。然后我想提取超过 z-score 阈值 1.7 的基因,以从每个 bin 中识别出显着可变的基因。
> head(temp[,1:5])
Drop7_0_AAACTAGGGTGG Drop7_0_AAAGGACGTACG Drop7_0_AACACTTGAGCC Drop7_0_AAGGCAACGAAT Drop7_0_AATGATGGGGTA
0610007P14RIK 0.1439444 0.0000000 0.000000 0.8759335 0.0000000
0610009B22RIK 0.0000000 0.6776718 0.000000 0.0000000 0.0000000
0610009O20RIK 0.1439444 0.0000000 0.000000 0.2735741 0.0000000
0610010B08RIK 1.4769893 1.1369215 1.124842 0.8759335 1.9544187
0610010F05RIK 0.7944809 0.0000000 0.000000 0.7016789 0.9144108
0610010K14RIK 0.1439444 0.0000000 1.124842 0.7016789 0.0000000
当我运行这段代码时:
library(dplyr)
n_bins = 20
temp = data
temp$rowm = rowMeans(temp)
outscore = temp %>% mutate(bin=ntile(rowm,n_bins)) %>%
group_by(bin) %>% mutate(zscore=scale(rowm),outlier=abs(zscore)>1.7)
我得到错误:Error: dims [product 619] do not match the length of object [618] 我认为是指数据中的 bin 数量。
有什么建议吗?
【问题讨论】:
-
提供一个可重复的好例子将帮助我们帮助您stackoverflow.com/questions/5963269/…
-
也许使用
boxplot(..., plot = FALSE)?或者hist休息,如果你愿意的话。 -
@Hack-R,我编辑了我的 OP 以显示我正在使用的一些数据和我拥有的代码。任何见解将不胜感激。
-
@user2117258 太好了,感谢您的额外努力。如果当前的答案不能回答你的问题,我会试一试。
-
@Hack-R,拜托!不幸的是,我仍然坚持这个问题。我将在 OP 中再次重申问题以进行澄清。
标签: r