从两个人一起处理某件事的数据框实例中,加上小时和案件名称

问题描述 投票:0回答:1

[我的最终目标是创建一个网络图,可能使用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,等等,依此类推。

感谢您的时间和精力。

r dplyr igraph
1个回答
0
投票

我认为这是您想要的。

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)
© www.soinside.com 2019 - 2024. All rights reserved.