为每个值链创建ID变量

  • 本文关键字:创建 ID 变量 r
  • 更新时间 :
  • 英文 :


我有一个看起来像这样的数据集:

data <- data.frame(Name1 = c("A", "B", "D", "E", "H"),
Name2 = c("B", "C", "E", "G", "I"))

我想添加一个ID列来帮助我跟踪组的名字,即谁引用谁?因此,对于示例数据,组将为:

Name1 Name2 GroupID
A     B       1
B     C       1
D     E       2
E     G       2
H     I       3

请注意,我的原始数据不是像这个例子那样排序的。提前感谢任何帮助!

您可以使用igraph包从您的数据集创建网络并确定集群:

data <- data.frame(Name1 = c("A", "B", "D", "E", "H"),
Name2 = c("B", "C", "E", "G", "I"))

library(igraph)
graph <- graph_from_data_frame(data, directed = FALSE)
clusters <- components(graph)
#data$GroupId <- sapply(data$Name1, function(x) clusters$membership[which(names(clusters$membership) == x)])
# Simpler version
data$GroupId <- clusters$membership[data$Name1]

出:

> data
Name1 Name2 GroupId
1     A     B       1
2     B     C       1
3     D     E       2
4     E     G       2
5     H     I       3