我有一个数据框,其中包含由 1 或 0 指示的标签的个人偏好:
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 个)
对于网络图,我正在寻找一种将宽格式数据转换为连续每对 tag=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()
,但不知道如何将它用于成对的列。我可以为每一对创建新变量并收集它们,但是对于一长串标签,这将变得不切实际。有没有更优雅的方法来做到这一点?甚至是特定的功能?