【问题标题】:Getting coincident information between rows获取行之间的重合信息
【发布时间】:2015-05-15 20:48:19
【问题描述】:

我想估计样本的百分比((0:1) 限制),描述为Sam 列,在上面和下面的探针中具有完全相同的信息(设计为AboBel 987654325@,以及哪些样本是上下探针之间的重合样本(分别设计为dfout中的SamsASamsB)。

输入df

     df <-  "Sam1  Sam2 Sam3 Sam4 Sam5 
Prb1  0       0    1    2    3    
Prb2  0       0    1    2    2    
Prb3  0       1    1    2    2    
Prb4  2       2    3    2    2" 

df <- read.table(text=df, header=T)

预期输出dfout:

dfout <-  "Abo Bel SamsA SamsB
        Prb1   NA  0.8  NA   Sam1-Sam2-Sam3-Sam4
        Prb2  0.8 0.8  Sam1-Sam3-Sam3-Sam4 Sam1-Sam3-Sam4-Sam5
        Prb3  0.8 0.4  Sam1-Sam3-Sam4-Sam5 Sam4-Sam5
        Prb4  0.4 NA Sam4-Sam5 NA"

    dfout <- read.table(text=dfout, header=T)

有什么想法吗?

【问题讨论】:

    标签: r rows probability estimation


    【解决方案1】:

    这是我将采用的方法,使用 for() 循环和 if 语句以清楚起见(如果效率至关重要,这些可以折叠和矢量化:

    df <-  "Sam1  Sam2 Sam3 Sam4 Sam5 
    Prb1  0       0    1    2    3    
    Prb2  0       0    1    2    2    
    Prb3  0       1    1    2    2    
    Prb4  2       2    3    2    2" 
    
    df <- read.table(text=df, header=T)
    
    
    for (i in 1:nrow(df)) {
      if (i > 1) {
        Sams <- df[i-1,1:5] == df[i,1:5]
        df[i,"Abo"] <- sum(Sams)/5
        df[i,"SamsA"] <- paste(names(df)[1:5][Sams], collapse="-")
      }
      if (i < nrow(df)) {
        Sams <- df[i+1,1:5] == df[i,1:5]
        df[i,"Bel"] <- sum(Sams)/5
        df[i,"SamsB"] <- paste(names(df)[1:5][Sams], collapse="-")
      }
    }
    
    out <- df[,c(8,6,9,7)]
    

    out 对象如下所示:

    > out
         Abo Bel               SamsA               SamsB
    Prb1  NA 0.8                <NA> Sam1-Sam2-Sam3-Sam4
    Prb2 0.8 0.8 Sam1-Sam2-Sam3-Sam4 Sam1-Sam3-Sam4-Sam5
    Prb3 0.8 0.4 Sam1-Sam3-Sam4-Sam5           Sam4-Sam5
    Prb4 0.4  NA           Sam4-Sam5                <NA>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      相关资源
      最近更新 更多