0

很多时候,您会下载数据并想知道表达水平的差异。事情变得复杂,因为每个样本可以有多个探针。

在以下示例中,我们只有两个样本(即 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

如上所示,样本之间的探针数量是不相等的。这将为下游分析创建不相等的向量长度,从而难以比较两个样本之间的表达水平。因此,您需要找到没有缺失观测值的探针(即我们想要具有 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

如果有人有更好的方法,请加注。。.

4

1 回答 1

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,]
于 2012-12-05T04:34:28.590 回答