【问题标题】:Filtering a matrix by the same value in R按R中的相同值过滤矩阵
【发布时间】:2018-11-02 04:17:17
【问题描述】:

我有一个 1014*100 的矩阵。我只需要 p.value

        TCGA.A7.A0CE.01A.11R.A00Z.07  TCGA.A7.A0CE.11A.21R.A089.07
hsa04014                 0.0010059007                 0.0009569162
hsa04010                 0.0007198587                 0.0006481671
hsa04015                 0.0008544083                 0.0006697753

第一种方式:

threshold<-0.05
matrix2<-my_matrix[apply(my_matrix,1,min)<threshold,]

输出是一个 463*100 的矩阵,但有些行的 p.value > 0.05。

第二种方式:

matrix2 <-NULL

for(i in 1:1014){
  n<- my_matrix[[i]]
  for(i in 1:100){
    if(n[[i]] < 0.05){
       n[[i]]<-i
  }
  else{
    n[[i]] <- NA
    } }
  matrix2<- rbind(matrix2, n)
}

有问题,我认为在 if 中。有谁能帮助我吗?提前致谢。

【问题讨论】:

  • 您只想保留所有值都低于阈值的行?
  • 我认为您在 apply 声明中需要 max 而不是 min。这是你在@snoram 得到的吗?

标签: r matrix filter submatrix


【解决方案1】:

您的解决方案对我来说效果很好,但也许我没有正确创建 data.frame。 您可以使用您的方法分 1 步完成,也可以分 2 步完成,在其中创建一列,存储最小值,然后根据该列进行过滤。

my_matrix <- data.frame(
  TCGA.A7.A0CE.01A.11R.A00Z.07 = c(0.051, 0.09, 0.04),
  TCGA.A7.A0CE.11A.21R.A089.07 = c(0.06, 0.01 , 0.067)
)
row.names(my_matrix) <- c("hsa04014","hsa04010","hsa04015")

threshold<-0.05

## In 1 step (your solution):
my_matrix[(apply(my_matrix,1,min)) < threshold,]

## In 2 steps:
my_matrix$min <- as.numeric(apply(my_matrix,1,min))
my_matrix[my_matrix$min < threshold,]

【讨论】:

  • 否,因为列是样本。没有名为 p 的列。
  • 您能提供一个my_matrix 的小例子吗?这会让事情变得容易得多;)
  • 在帖子中添加。
  • 你也可以上传str(my_matrix)吗?也许数字列不是数字而是因子?
  • 这显示了第一行:data.frame': 1014 obs。 100 个变量:$ TCGA.A7.A0CE.01A.11R.A00Z.07:num 0.001006 0.00072 0.000854 0.253661 0.000865
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
相关资源
最近更新 更多