如何从scale()中排除某些行来规范R中的计算?

时间:2017-06-15 05:42:56

标签: r scale rows bioinformatics normalizing

我正在尝试绘制一些测序数据,并希望仅从缩放计算中排除染色体4数据(第一列中的行具有'4')。染色体4可能会使标准化均值/ Sd计算出现偏差,因此我希望将其从scale()函数中排除。有没有办法做到这一点?现在,我有:

preMBT_RT <-preMBT_RT %>% mutate_each_(funs(scale(.) %>% as.vector),vars=c("Timing"))

^但是有什么方法可以指示IN函数在第一列中排除'4'的行? 我仍然希望新数据框的缩放行为'4',我只想让scale()中的计算不使用Chromosome 4数据。任何帮助都非常感谢 - 谢谢!

以下是数据框简要说明的示例:

Chromosome     Location     Replication Timing
1              3748         -0.0001
4              1847101      0.000302   <-row I would want to exclude
20             1234         0.000102
...            ...          ...

1 个答案:

答案 0 :(得分:2)

我们可以将'Chromosome'4对应的'Timing'替换为NA,然后进行比例

preMBT_RT %>%
       mutate(Timing =  scale(Timing *NA^(Chromosome =="4")))

如果我们需要排除scale中的值,同时保持'Timing'的原始值

preMBT_RT %>% 
   mutate(Timing =  ifelse(Chromosome =="4", Timing, scale(Timing[Chromosome != "4"])))