形成线组并选择特定值(R)

形成线组并选择特定值(R),r,max,grouping,min,R,Max,Grouping,Min,我想在“type1”collumn和“type2”collumn之间的相互连接(两种方式)的基础上形成一组行。逻辑是:如果“type1”中的字符串与“type2”中的字符串位于同一行,则它们位于同一组中。但是,如果“type2”不止一行,则所有这些都在同一组中 请看前三行:“增益765”和“损耗1136”是相关的。然而,“损失1136”与“收益766”相关,随后“收益766”与“损失765”相关。这就是我的团队:1-“增益765”,2-“损耗1136”,3-“增益766”,4-“损耗765” 在

我想在“type1”collumn和“type2”collumn之间的相互连接(两种方式)的基础上形成一组行。逻辑是:如果“type1”中的字符串与“type2”中的字符串位于同一行,则它们位于同一组中。但是,如果“type2”不止一行,则所有这些都在同一组中

请看前三行:“增益765”和“损耗1136”是相关的。然而,“损失1136”与“收益766”相关,随后“收益766”与“损失765”相关。这就是我的团队:1-“增益765”,2-“损耗1136”,3-“增益766”,4-“损耗765”

在这个组中,我想在组的第一行用“chrx”中的字符串做一个新行;“startx”和“starty”中的最低值;“endx”和“endy”中的值较大。以我的数据为例:

 type1      chrx     startx  endx   chry    starty   endy    type2
gain_765    chr15   9681969 9685418 chr15   9660912 9712719 loss_1136
gain_766    chr15   9706682 9852347 chr15   9660912 9712719 loss_1136
gain_766    chr15   9706682 9852347 chr15   9765125 9863990 loss_765
gain_780    chr20   9706682 9852347 ch20    9765125 9863990 loss_769
gain_760    chr15   9706682 9852347 chr15   9660912 9712719 loss_1137
gain_760    chr15   9706682 9852347 chr15   9765125 9863990 loss_763
对于第一组(第1行至第3行),这是预期输出:

 chr       start     end
 chr15    9660912   9863990
现在,请看第4行:“增益780”仅与“损耗769”相关。该组(仅第4行)的输出是否预期如下:

 chr       start     end
chr20     9706682   9863990
现在,第5行和第6行组由“增益760”组成;“损失1137”和“损失763”。在最后一种情况下,预期输出为:

  chr       start     end
 chr15     9660912   9863990
但是,我有数千行的案例。因此,我需要一个唯一输出中的所有结果,如下所示:

  chr       start     end
 chr15    9660912   9863990
 chr20    9706682   9863990
 chr15    9660912   9863990

干杯。

您可以按如下操作:

library(igraph)

DF <- read.csv(text=
"type1,chrx,startx,endx,chry,starty,endy,type2
gain_765,chr15,9681969,9685418,chr15,9660912,9712719,loss_1136
gain_766,chr15,9706682,9852347,chr15,9660912,9712719,loss_1136
gain_766,chr15,9706682,9852347,chr15,9765125,9863990,loss_765
gain_780,chr20,9706682,9852347,ch20,9765125,9863990,loss_769
gain_760,chr15,9706682,9852347,chr15,9660912,9712719,loss_1137
gain_760,chr15,9706682,9852347,chr15,9765125,9863990,loss_763",
stringsAsFactors=F)

# create a graph with the relations type1 --> type2
# you can visualize it using: plot(g)
g <- graph.data.frame(DF[,c('type1','type2')])

# decompose in the connected components
subgraphs <- decompose.graph(g,mode="weak")

# create the sub data.frames using the subgraphs vertices
subDFs <- lapply(subgraphs,
                FUN=function(sg){ 
                      v <- V(sg)$name; 
                      DF[DF$type1 %in% v | DF$type2 %in% v,];
                    }
                )

# create the single-line data.frames for each group
subRes <- lapply(subDFs,
                 FUN=function(sd){
                       data.frame(chrx=sd$chrx[1], 
                                  start=min(c(sd$startx,sd$starty)), 
                                  end=max(c(sd$endx,sd$endy)))
                     }
                )

# merge the result in one single data.frame
res <- do.call(rbind.data.frame,subRes)

res 
>
  chrx   start     end
1 chr15 9660912 9863990
2 chr20 9706682 9863990
3 chr15 9660912 9863990
库(igraph)
DF类型2
#可以使用:plot(g)将其可视化

g在您的小示例中,第一组似乎也包含
增益760
,因为它连接到第一组中的
损耗1136
。。。我错了吗?你是对的!这是我的错,对不起。我修改了这个例子。现在请看一看。谢谢不。所有重复的type1字符串都是后续行。然后,如果“gain_765”与多个“type2”字符串相关,它将始终显示在下面的行中。它能回答你的问题吗?是的,很抱歉,这是增益760的情况…同样适用于type2字符串。始终是后续行。