Я хочу построить сеть с R. Проблема, однако, заключается в том, что мой фрейм данных, который содержит данные отношений, также содержит дочерние элементы детей. Это выглядит следующим образом:
parent <- c("A","A","A","B","B","E")
child <- c("B","C","D","C","D","D")
df <- data.frame(parent,child)
Я хотел бы удалить дочерних детей в df
, чтобы я мог использовать igraph для построения своей сети. Поэтому я хочу, чтобы мои данные выглядели как df_net
:
parent <- c("A","B","B","E")
child <- c("B","C","D","D")
df_net <- data.frame(parent,child)
net <- graph_from_data_frame(df_net,directed = T)
plot(net)
Рисунок графика (net)
Что лучше способ (автоматически) удалить ненужные строки df
? (У меня есть несколько фреймов данных, содержащих до 100 строк, поэтому удаление строк вручную - это не вариант.)
Моей первой идеей было использование while l oop для поиска родителей на каждом этапе иерархии. , Я думал, что смогу использовать это для фильтрации строк в df
. Но я не думаю, что я на правильном пути здесь. Любые идеи приветствуются!
`%notin%` <- Negate(`%in%`)
i <- nrow(df)
y <- list()
z <- list()
j <- 1
while (i > 0) {
v <- unique(df$parent[!(df$parent %in% df$child)]) # find mismatch (only in parent, not in child)
df <- df %>% filter(parent %notin% v)
print(v)
y[[j]] <- v
z[[j]] <- df
i = nrow(df)
j = j+1
}