Sorting nodes according to degree and manipulating in R using igraph -


the datasets working shows links between nodes.for example:

> data2    v1   v2 1 10000 4725 2  4725 6805 3  4725 3250 4  5725 3250 5  1725 7673 

(using small dataframe example).here dataframe says there undirected link between node 10000 , 4725,a link exists between node 4725 , 6805 , forth.using igraph package,i obtaining degree individual nodes:

  g<-graph.data.frame(data2, directed=f)  deg <- igraph::degree(g) > deg    10000  4725  5725  1725  6805  3250  7673      1     3     1     1     1     2     1  

next,i sorting nodes according degrees in decreasing order:

 > dsorted <-sort.int(deg,decreasing=true,index.return=false)  > dsorted  4725  3250 10000  5725  1725  6805  7673     3     2     1     1     1     1     1 

taking first column of dataframe:

  > ln1 <- data2[,1] > ln1 [1] 10000  4725  4725  5725  1725 

my objective replace nodes in ln1 nodes' corresponding orders in dsorted.for example,10000 should replaced 3,because in dsorted 10000 comes @ 3rd index.similarly 4725 should replaced 1,because comes first in dsorted.i have tried following code:

> for(i in 1:length(deg)){ln1[which(ln1==dsorted[i])]<-i} 

but not working.ln1 stays same.it occurred me in dsorted,the node numbers being considered indexes.so tried following code well(dsorted returning index vector):

> dsorted <- sort.int(deg,decreasing=true,index.return=true) > for(i in 1:length(deg)){ln1[which(ln1==dsorted$ix[i])]<-i} 

but ln1 still stays same.i new r.would appreciate if kindly shows me path here.

if understand correctly, can do:

ln1 <- order(order(deg, decreasing=t)) # [1] 3 1 4 5 6 2 7  # if want names names(ln1) <- names(deg) # 10000  4725  5725  1725  6805  3250  7673  #     3     1     4     5     6     2     7 

so mentioned, 10000 has value 3 because 3rd in order 4725 has value 1 because 1st in order, etc.

the way sort , order related: sort default sorts vector, , order returns indices sort vector.

why double-order? kind of inverses of each other.

sorted <- sort(deg) deg[order(deg)] == sorted sorted[order(order(deg))] == deg 

order(deg) arrange unsorted deg in order. order(order(deg)) arrange sorted deg resembles original order. confusing in words, play around , you'll see.


Comments