R:有条件地将数据从列复制到行

R: Conditionally duplicating data from columns into rows

我正在尝试插入新行,这些新行会复制该行中包含的某些数据,但第一列将是从 R 中现有列插入的唯一数据。

我正在尝试设置此数据以便在 Tableau 中使用并创建网络可视化。我不希望我的客户在输入数据时插入大量重复数据以创建此可视化效果。

我目前的数据是这样的:

            Connection.ID     From             To              Note
  1         1                 Niamh MacCallum  James Fraser    Niamh and James are coworkers
  2         2                 James Fraser     Simon David     James and Simon are brothers
  3         3                 Niamh MacCallum  Tom Ashton      Niamh recruited Tom to join her organization

这是我创建的一些虚假数据,复制了我公司的数据,但目标是能够可视化我们的员工与 customers/volunteers 他们相遇并建立专业关系之间的联系。

我希望我的数据看起来像这样导出到 csv 中:

            Connection.ID     Node.Name        Notes
  1         1                 Niamh MacCallum  Niamh and James are coworkers
  2         1                 James Fraser     Niamh and James are coworkers
  3         2                 James Fraser     James and Simon are brothers
  4         2                 Simon David      James and Simon are brothers     
  5         3                 Niamh MacCallum  Niamh recruited Tom to join her organization
  6         3                 Tom Ashton       Niamh recruited Tom to join her organization

我找到了一些创建类似内容的资源,最好的是这个先前提出的问题,但它并没有完全满足我的需要,或者老实说我可能误用了它 ().我以为我可以在删除 "To" 列并将 "From" 重命名为 "Node.Name" 时创建相同的东西,但我创建了重复数据,每行插入了六个副本,同时还错误地将注释应用到错误的连接.

如有任何帮助,我将不胜感激!我是 R 的新手并且是自学成才的,所以如果您有解决方案或资源可以让我学习解决方案,那也很棒。谢谢!

编辑:发现了一个我以前从未见过的类似问题,所以我将其添加到此处以防其他人发现并可以参考它们:Create network files from "classic" dataframe in R - igraph

这是一个从宽到长的转换,可以使用 reshape2 包中的 melt 完成。做:

df2 = melt(data = df, 
           id.vars = c("Connection.ID","Note"), 
           measure.vars = c("From","To"), 
           variable.name = 'From_To',
           value.name = "Node.Name" )

# Remove the unwanted From_To column
df2$From_To = NULL

结果:

> df2
  Connection.ID                                             Note       Node.Name
1             1                    Niamh and James are coworkers Niamh MacCallum
2             2                     James and Simon are brothers    James Fraser
3             3     Niamh recruited Tom to join her organization Niamh MacCallum
4             1                    Niamh and James are coworkers    James Fraser
5             2                     James and Simon are brothers     Simon David
6             3     Niamh recruited Tom to join her organization      Tom Ashton