2013-07-09 2 views
0

В настоящее время я работаю с igraph в R. Я создаю несколько графиков для отдельных пользователей в сети. Чтобы создать каждый из этих графиков, мне нужно прочитать несколько файлов csv. Первый файл CSV показывает взаимодействия между людьми и их дважды ассоциаций веса, который выглядит, как показано ниже:Использование одного файла csv для определения того, какие атрибуты в другом CSV-файле присутствуют на графике с помощью igraph в R

Individual1,Individual2,Weight 
    A,A,1 
    A,B,.2 
    A,C,.02 
    B,C,.5 

второй CSV файл я прочитанный в ряды этих людей. В следующем формате:

Individual,Rank 
    A,1 
    B,5 
    C,3 
    D,4 
    E,2 

Я хотел бы использовать ряды, чтобы определить размер узлов в пределах участка и с помощью кода:

plot(g, layout=layout.fruchterman.reingold, 
     vertex.size=V(g)$Rank +20) 

Проблема у меня в том, что всегда есть люди с рангом, чем люди, наблюдаемые для данного сюжета. Есть ли способ создать оператор, который будет игнорировать всех лиц во втором CSV-файле, который отсутствует в первом CSV-файле?

+0

если 'x' это данные из CSV 1 и' y' - это ваши данные из csv. 2. Как выглядит что-то вроде 'y [y $ Individual% in% c (x $ Individual1, x $ Individual2),]'? –

+0

Должен был сказать, что я все еще очень новичок в Р. Я бы поставил что-то подобное в выражении if? Итак, если эти люди одинаковы, то он построит график? – Judy

+0

'y [y $ Individual% in% c (x $ Individual1, x $ Individual2),]' вернет 'data.frame' с похожим' y', но только с строками, где 'y $ Individual' находится в' x $ Individual1' или 'x $ Individual2'. Таким образом, вы, вероятно, захотите сохранить его как новую переменную, которая будет использоваться в вашем коде для построения, а не для полного 'y'' data.frame' –

ответ

3

Ну, вы можете удалить их перед созданием графика или удалить их, когда вы их рисуете. Например.

library(igraph) 

D1 <- read.csv(textConnection("# 
    Individual1,Individual2,Weight 
    A,A,1 
    A,B,.2 
    A,C,.02 
    B,C,.5"), 
    header=TRUE, comment.char="#", strip.white=TRUE, 
    stringsAsFactors=FALSE) 

D2 <- read.csv(textConnection("# 
    Individual,Rank 
    A,1 
    B,5 
    C,3 
    D,4 
    E,2"), 
    header=TRUE, comment.char="#", strip.white=TRUE, 
    stringsAsFactors=FALSE) 

G <- graph.data.frame(D1, vertices=D2) 

par(mar=c(0,0,0,0)) 
plot(G, vertex.size=V(G)$Rank*5+20, edge.arrow.size=.4) 

example figure

Теперь, если вы хотите, чтобы удалить те, которые не в D1, то сделайте следующее:

G2 <- delete.vertices(G, setdiff(D2[,1], c(D1[,1], D1[,2]))) 
plot(G2) 

 Смежные вопросы

  • Нет связанных вопросов^_^