首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将所有数据标准化为单个基因(观察)

将所有数据标准化为单个基因(观察)
EN

Stack Overflow用户
提问于 2015-02-05 00:19:20
回答 1查看 125关注 0票数 1

我有来自850种蛋白质的一些蛋白质表达数据,我想将数据规范化为参考蛋白。这是纠正技术错误的好方法。我是R的新手,我刚刚想出了一个整洁的数据集。但是,当我搜索规范化时-它主要是缩放数据。我找不到很好的方法来比较数据集中的数据点。因此,我有以下内容,其中type=D或T,pt.num=1-8,在612.9 kb文件中有859个带有9952个元素的GeneID。

代码语言:javascript
复制
> head(df10g)
  GeneID type pt.num   value
1    A2M    D      1  8876.5
2   ABL1    D      1  2120.8
3   ACP1    D      1  1266.6
4   ACP5    D      1 67797.6
5 ACVRL1    D      1   650.1
6   ACY1    D      1  6264.8
318 IGF2R    D      1   6294.8

我想对每个IGF2R进行规范化处理。但我不太明白它的语义。我想要这种功能

代码语言:javascript
复制
Norm.ig2Fr=GeneID.type.pt.num(value)/IG2FR.type.pt.num(value)

Norm.ig2fr=ASM.D.1 (value)/IG2FR.D.1 (value)

Norm.ig2fr=8876.5/6294.8

期望的输出将是

代码语言:javascript
复制
GeneID type pt.num   value              Norm.ig2fr      log2Norm.ig2fr
    1    A2M    D      1  8876.5        1.41            0.49
    2   ABL1    D      1  2120.8
    3   ACP1    D      1  1266.6
    4   ACP5    D      1 67797.6

我想我可以使用变异变换或临时转换,但是我缺少一些东西来修正这个比率的分母与相同的GeneID值,但是改变了pt.num和类型。

代码语言:javascript
复制
df11 <- ddply(df10g, .(pt.num), transform, Norm.ig2b=value/IGF2R)

代码语言:javascript
复制
df10.igf2r<- mutate(df10t, .(type, pt.num), Norm.ig2fr=value/IG2FR)

dput(df10g)
structure(list(GeneID = structure(c(1L, 2L, 3L, 4L, 6L, 7L), .Label = c("A2M", 
"ABL1", "ACP1", "ACP5", "Activated Protein C", "ACVRL1", "ACY1"),class = "factor"), type = c("D", "D", "D", "D", "D", 
"D"), pt.num = c("1", "1", "1", "1", "1", "1"), value = c(8876.5, 
2120.8, 1266.6, 67797.6, 650.1, 6264.8)), .Names = c("GeneID", 
"type", "pt.num", "value"), row.names = c(NA, 6L), class = "data.frame")

如有任何建议或见解,将不胜感激。谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-05 02:28:19

我想这可能就是你的意思。我想不出plyr的解决方案。但是,我想向dplyr提出一个建议。我在这里创建了一个示例数据来演示代码。我认为您希望使用typept.num组合使用group_by()。然后,你想要用mutate()实现正常化。value[GeneID == "IGF2R"]指定每个组中IGF2R的值。例如,对于D1组,value[GeneID == "IGF2R"]为1281.000,对于T1组,value[GeneID == "IGF2R"]为1561.364。使用这些值,R对每个组进行规范化。

代码语言:javascript
复制
set.seed(111)
mydf <- data.frame(GeneID = rep(c("A2M", "ABL1", "ACP1", "ACP5",
                                  "ACVRL1", "ACY1", "IGF2R"), times = 2),
                   type = rep(c("D", "T"), each = 7),
                   pt.num = 1,
                   value = runif(14, 1200, 8800),
                   stringsAsFactors = FALSE)

#   GeneID type pt.num    value
#1     A2M    D      1 5706.658
#2    ABL1    D      1 6721.257
#3    ACP1    D      1 4015.207
#4    ACP5    D      1 5113.421
#5  ACVRL1    D      1 4070.240
#6    ACY1    D      1 4379.364
#7   IGF2R    D      1 1281.000
#8     A2M    T      1 5245.444
#9    ABL1    T      1 4484.421
#10   ACP1    T      1 1911.980
#11   ACP5    T      1 5423.927
#12 ACVRL1    T      1 5685.737
#13   ACY1    T      1 1710.273
#14  IGF2R    T      1 1561.364

library(dplyr)             
group_by(mydf, type, pt.num) %>%
mutate(out = value / value[GeneID == "IGF2R"])


#   GeneID type pt.num    value      out
#1     A2M    D      1 5706.658 4.454847
#2    ABL1    D      1 6721.257 5.246884
#3    ACP1    D      1 4015.207 3.134433
#4    ACP5    D      1 5113.421 3.991743
#5  ACVRL1    D      1 4070.240 3.177394
#6    ACY1    D      1 4379.364 3.418708
#7   IGF2R    D      1 1281.000 1.000000
#8     A2M    T      1 5245.444 3.359527
#9    ABL1    T      1 4484.421 2.872118
#10   ACP1    T      1 1911.980 1.224557
#11   ACP5    T      1 5423.927 3.473840
#12 ACVRL1    T      1 5685.737 3.641520
#13   ACY1    T      1 1710.273 1.095371
#14  IGF2R    T      1 1561.364 1.000000

data.table中应用相同的过程,下面的代码也在工作。

代码语言:javascript
复制
library(data.table)
foo <- setDT(mydf)[, out := value / value[GeneID == "IGF2R"], by = list(type, pt.num)]
print(foo)

 #   GeneID type pt.num    value      out
 #1:    A2M    D      1 5706.658 4.454847
 #2:   ABL1    D      1 6721.257 5.246884
 #3:   ACP1    D      1 4015.207 3.134433
 #4:   ACP5    D      1 5113.421 3.991743
 #5: ACVRL1    D      1 4070.240 3.177394
 #6:   ACY1    D      1 4379.364 3.418708
 #7:  IGF2R    D      1 1281.000 1.000000
 #8:    A2M    T      1 5245.444 3.359527
 #9:   ABL1    T      1 4484.421 2.872118
#10:   ACP1    T      1 1911.980 1.224557
#11:   ACP5    T      1 5423.927 3.473840
#12: ACVRL1    T      1 5685.737 3.641520
#13:   ACY1    T      1 1710.273 1.095371
#14:  IGF2R    T      1 1561.364 1.000000
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28334066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档