假设我有一个包含两列P1和P2的数据帧。我想得到的是一个名为ID的新列,P1的相同值获得相同的ID,并且P2的相同值获得相同的ID。
P1 P2
a 1
a 1
a 2
b 2
c 3
c 4
所以,我想获得ID列如下:
P1 P2 ID
a 1 1
a 1 1
a 2 1
b 2 1
c 3 2
c 4 2
我怎样才能在R?
中这样做答案 0 :(得分:4)
获得此功能的一种方法是将数据视为图表。 ID是图表的连接组件。
IDs = read.table(text="P1 P2
a 1
a 1
a 2
b 2
c 3
c 4",
header=TRUE, stringsAsFactors=FALSE)
library(igraph)
G = graph_from_edgelist(as.matrix(IDs), directed = FALSE)
IDs$ID = components(G)$membership[IDs$P1]
IDs
P1 P2 ID
1 a 1 1
2 a 1 1
3 a 2 1
4 b 2 1
5 c 3 2
6 c 4 2
为了帮助想象这一点,
RES = bipartite_mapping(G)
V(G)$type = RES$type
LO = layout_as_bipartite(G)
plot(G, layout=LO)