删除R矩阵中的重复行

92dk7w1h  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(179)

所以我尝试用igraph在R中做一个网络分析,但我是一个R新手。
我的Excel数据库看起来像这样..只是更大。

test<-separate(ID_test, 'Contacts 1', paste("Contacts", 1:20, sep="_"), sep=",", extra="drop")
m <- as.matrix(test)
el <- cbind(m[, 1], c(m[, -1]))
el2<-na.omit(el)
testel<- graph_from_edgelist(el2, directed=FALSE)
plot(testel)

我将Contacts中的数据分隔为多列,并将数据转换为矩阵,这样我就可以使用cbind创建一个边缘列表。
之后,我删除了出现NA的每一行。
然后我可以用igraph绘制我的无向网络。
问题是我有重复的行,其中ID只是在V1和V2之间切换。
因此,我的网络中有两个f.e. ID_009和ID003,因为边缘列表如下所示。

如图所示,第一行和最后一行基本相同,只是V1和V2之间的值发生了切换。
我已经尝试了多种解决方案,但似乎没有一个适合我。

el4<-el3[!duplicated(el[c("V1", "V2")]),] #doesnt recognize the right duplicates as in the example above
el4<-el3[!duplicated(paste(pmin(V1, V2), pmax(V1, V2)))] #Error in pmin(V1, V2) : object 'V1' not found
el4<-el3[!duplicated(paste(pmin("V1", "V2")), pmax("V1", "V2"))] # creates values with which i cant create an network
g <- graph_from_edgelist(unique(rbind(el2[, 1:2])), directed = FALSE) #doesnt change anything
plot(g)
6yjfywim

6yjfywim1#

以下示例说明了如何以任意顺序删除重复行:

el <- data.frame(V1 = paste0("id_00", c(3,rep(4,8), rep(9,3))), 
                 V2 = paste0("id_00", c(9,1,2,3,5,6,7,8,9,1,2,3)))

el
#>        V1     V2
#> 1  id_003 id_009
#> 2  id_004 id_001
#> 3  id_004 id_002
#> 4  id_004 id_003
#> 5  id_004 id_005
#> 6  id_004 id_006
#> 7  id_004 id_007
#> 8  id_004 id_008
#> 9  id_004 id_009
#> 10 id_009 id_001
#> 11 id_009 id_002
#> 12 id_009 id_003
dups <- duplicated(t(apply(el, 1, sort)))

el[!dups, ]
#>        V1     V2
#> 1  id_003 id_009
#> 2  id_004 id_001
#> 3  id_004 id_002
#> 4  id_004 id_003
#> 5  id_004 id_005
#> 6  id_004 id_006
#> 7  id_004 id_007
#> 8  id_004 id_008
#> 9  id_004 id_009
#> 10 id_009 id_001
#> 11 id_009 id_002

相关问题