[我的最终目标是创建一个网络图,可能使用igraph
,该图显示一个100人的小组,每个人在各种事务(项目)上都曾与之合作。图中两个人之间边缘的粗细将反映该人在该问题上进行工作的时间,并且该图将标识他们两个共同工作的问题的名称。
到目前为止,我已经使用dplyr
创建了一个宽数据框,看起来像下面的玩具数据集。
dput(soQ)
structure(list(Matter = c("A", "B", "C", "D", "E", "F"), Person1 = c(5,
0, 0, 0, 2, 4), Person2 = c(0, 3, 0, 2, 0, 0), Person3 = c(2,
2, 0, 0, 3, 2), Person4 = c(0, 1, 1, 1, 0, 2)), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
有人可以显示R如何创建一个数据框,该数据框列出两个从事同一事务的人员的实例,并且这些实例包括事务名称和工作时间吗?结果可能如下所示:
Person WorkedWith Matter Hours
Person1 Person3 A 5
Person1 Person3 E 2
Person1 Person3 F 4
Person1 Person4 F 4
Person3 Person1 A 2
Person3 Person1 E 3
等
Person1在任何问题上都与Person2一起工作,在3个问题上(A,E和F)与Person3一起工作,在一个问题上(F)与Person4一起工作。 Person1和Person3在他们共同处理的事务上记录了不同的小时数。
Person2与Person3处理一个问题(B),与Person4处理一个问题(B,等等,依此类推。
感谢您的时间和精力。
我认为这是您想要的。
structure(list(Matter = c("A", "B", "C", "D", "E", "F"), Person1 = c(5,
0, 0, 0, 2, 4), Person2 = c(0, 3, 0, 2, 0, 0), Person3 = c(2,
2, 0, 0, 3, 2), Person4 = c(0, 1, 1, 1, 0, 2)), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
df %>%
pivot_longer(cols = -Matter) %>%
filter(value > 0) %>%
left_join(., ., by = "Matter") %>%
filter(name.x != name.y) %>%
transmute(Person = name.x, WorkedWith = name.y,
Matter, Hours = value.x) %>%
arrange(Person)