у меня есть фрейм данных с индивидуальными предпочтениями для тегов обозначенного 1 или 0:R: из широкого списка тегов в длинный список соединений
mydata <- data.frame(
ID = c(1:4),
tag1 = c(1, 0, 1, 0),
tag2 = c(0, 0, 0, 0),
tag3 = c(1, 0, 1, 1),
tag4 = c(1, 1, 0, 1),
tag5 = c(0, 1, 1, 1)
)
(Мой данные имеют гораздо больше тегов, чем просто 5)
Для сетевой диаграммы я ищу способ преобразования широкоформатных данных в длинный список вхождений между каждой парой тега = 1 в строке. Для приведенного выше примера это будет выглядеть следующим образом:
mydata2 <- data.frame(
ID = c(1,1,1,2,3,3,3,4,4,4),
target = c("tag1","tag1","tag3","tag4","tag1","tag1","tag3","tag3","tag3","tag4"),
source = c("tag3","tag4","tag4","tag5","tag3","tag5","tag5","tag4","tag5","tag5")
)
Я хотел использовать tidyr
«s gather()
для этого, но не знает, как использовать его для пар колонн. Я мог бы просто создавать новые переменные для каждой пары и собирать их, но для длинного списка тегов это становится непрактичным. Есть ли более элегантный способ сделать это? Или даже конкретная функция?
Можете ли вы объяснить, как мы должны перейти от этого конкретного ввода данных к этому конкретному выходу данных? –