微阵列数据:寻找没有遗漏观察的探针

时间:2012-12-05 03:49:09

标签: r

通常,您会下载数据并希望了解表达水平的差异。事情变得复杂,因为每个样本可以有多个探针。

在以下示例中,我们只有两个样本(即1和4):

您的data文件看起来像这样

  ProbeID      SampleID ExperimID    Value    Type
1 2747406        1         2      6.449200 AFFEXON
2 2747407        4         2      6.455550 AFFEXON
3 2747408        1         2      6.534564 AFFEXON
4 2747408        4         2      6.453523 AFFEXON
..etc

要查看手头的问题,请提取样本1和4,看看矢量长度是否匹配:

Sample1 <- data[ data$SampleID == 1, ]    #Extract from data where SampleID == 1
Sample4 <- data[ data$SampleID == 4, ]    #Extract from data where SampleID == 4
dim(Sample1)                              #Return length of row and col using dim()
[1] 1012703  5 
dim(Sample4)
[1] 1411399  5

如上所述,样品之间的探针数量不相等。这将为下游分析创建不等的载体长度,使得难以在两个样品之间比较表达水平。因此,您需要找到NO缺失观察的探针(即我们需要具有2个命中或频率为2的探针,因为我们有2个样本,并忽略1个命中探针。这将产生相等的向量长度并允许我们进行比较两个样本之间的表达水平。

这是一种方法:

probeTbl <- table(data[,1])               #Export probes into a table
head(probTbl)                             #Notice freq! We don't want the 1 hit ones.
2315101 2315102 2315103 ... 
  2       1       1
probeToSample <- which(probeTbl == 2)     #Export only those with 2 observations
head(probeToSample)                       #Check that probes -> to new variable
2315101 2315102 2315103 ...
  1       2       3               
numericPtoS <- as.numeric                 #Extract probeToSample as numeric vector 
(names(probeToSample))

WorkingData <- data[,1] %in% numericPtoS  #Use %in% logic operator to match original         
                                           #data with new vector numericPtoS, which 
                                           #contains desired hits or observations == 2

如果有人有更好的方法,请填写。 。

1 个答案:

答案 0 :(得分:1)

不是一个新颖的答案,但可能是一个更完整的例子和一些小的改进,以便更普遍。

我的示例包括2个探针 - 一个存在于3个样本中,一个存在于2.我动态检查样本数(而不是您的硬编码x==2

您能否确认这是您正在寻找的行为?如果是这样,也许我们可以从这里进一步改进。

data <- read.table(text="ProbeID      SampleID ExperimID    Value    Type
 1 2747406        1         2      6.449200 AFFEXON
 2 2747407        1         2      6.455550 AFFEXON
 3 2747406        4         2      6.349200 AFFEXON
 4 2747407        4         2      6.755550 AFFEXON
 5 2747406        5         2      6.755550 AFFEXON")

freq <- table(data[,1])      #Export the probes into a table (with frequencies) 
compProbes <- freq[freq==max(freq)]  #Create new variable that contains probes with NO missing obs by identifying the probe with the maximum number of occurrences
compProbes <- as.numeric(names(compProbes)) #Extract name as numeric vector 
compRows <- data[,1] %in% compProbes    #Use %in% logic operator to match z and with probes=TRUE
newdata <- data[compRows,]