形成线组并选择特定值(R)
我想在“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”中的值较大。以我的数据为例:形成线组并选择特定值(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 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字符串。始终是后续行。