【问题标题】:Subsetting one matrix based in another matrix基于另一个矩阵对一个矩阵进行子集化
【发布时间】:2016-01-27 10:21:49
【问题描述】:

我想根据G 字符串选择R 以获得具有相同维度的分离输出。这是我的输入:

R <- 'pr_id  sample1  sample2 sample3
            AX-1   100       120     130    
            AX-2   150       180     160
            AX-3   160       120     196'
R <- read.table(text=R, header=T)

G <- 'pr_id  sample1  sample2 sample3
            AX-1   AB       AA     AA    
            AX-2   BB       AB     NA
            AX-3   BB       AB     AA'
G <- read.table(text=G, header=T)

这是我的预期输出:

AA <- 'pr_id  sample1  sample2 sample3
            AX-1   NA       120     130    
            AX-2   NA       NA     NA
            AX-3   NA       NA     196'
AA <- read.table(text=AA, header=T)

AB <- 'pr_id  sample1  sample2 sample3
            AX-1   100       NA     NA    
            AX-2   NA       180     NA
            AX-3   NA       120     NA'
AB <- read.table(text=AB, header=T)

BB <- 'pr_id  sample1  sample2 sample3
            AX-1   NA       NA     NA    
            AX-2   150       NA     NA
            AX-3   160       NA     NA'
BB <- read.table(text=BB, header=T)

有什么想法来执行它?

【问题讨论】:

    标签: r subset


    【解决方案1】:

    另一种方式:

    lev<-setdiff(as.character(unique(unlist(G[-1]))),NA)
    lapply(lev, function(x) {res<-G[-1]==x;res[!res]<-NA;cbind(R[1],res*R[-1])})
    

    【讨论】:

      【解决方案2】:

      我们将第二列中的“G”子集化,转换为矩阵,并用其中的值分割序列,创建一个新矩阵,使用 NA (“G1”) 并使用索引,替换对应的值到“R”数据集值。

      lapply(split(seq_along(as.matrix(G[-1])), 
             as.matrix(G[-1])), function(x) {
              G1 <- matrix(NA, ncol=ncol(G)-1, nrow=nrow(G), 
                         dimnames=list(NULL, names(G)[-1]))
              G1[x] <- as.matrix(R[-1])[x]
              data.frame(pr_id=R$pr_id, G1) })
      #$AA
      #  pr_id sample1 sample2 sample3
      #1  AX-1      NA     120     130
      #2  AX-2      NA      NA      NA
      #3  AX-3      NA      NA     196
      
      #$AB
      #  pr_id sample1 sample2 sample3
      #1  AX-1     100      NA      NA
      #2  AX-2      NA     180      NA
      #3  AX-3      NA     120      NA
      
      #$BB
      #  pr_id sample1 sample2 sample3
      #1  AX-1      NA      NA      NA
      #2  AX-2     150      NA      NA
      #3  AX-3     160      NA      NA
      

      【讨论】:

        【解决方案3】:
        row.names(R) <- R[[1]]; R <- as.matrix(R[-1])
        row.names(G) <- G[[1]]; G <- as.matrix(G[-1])
        AA <- ifelse(G=="AA", R, NA)
        AB <- ifelse(G=="AB", R, NA)
        BB <- ifelse(G=="BB", R, NA)
        

        lapply()(最后三行):

        lapply(c("AA", "AB", "BB"), function(x) ifelse(G==x, R, NA))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-10
          • 1970-01-01
          • 2021-11-16
          • 2016-11-17
          相关资源
          最近更新 更多