获取行之间的重合信息

时间:2015-05-15 20:48:19

标签: r rows probability estimation

我想估算样本的百分比((0:1)限制),描述为Sam列,它们在上面和下面的探针中具有完全相同的信息(设计为Abo分别在Beldfout和哪些样本是上方和下方探针之间的重合点(分别在SamsA中设计为SamsBdfout) 。

输入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)

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这是我将采用的方法,使用=IF(F5=0,0,<ur calculated formula>) 循环和if语句清晰(如果效率至关重要,这些可以折叠和矢量化:

for()

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