我正在尝试进行社交网络分析并创建关联数据框架。我有 2 列,一列包含 ID,一列包含日期。我想根据日期将 ID 列分成“从”和“到”列,以查看在哪些天同时看到两个 ID。
这就是我的数据:
Date ID
1 2010-01-02 A
2 2010-01-02 A
3 2010-01-02 A
4 2010-01-02 A
5 2010-01-02 A
6 2010-01-02 A
7 2010-01-02 A
8 2010-01-02 A
9 2010-01-02 A
10 2010-01-02 W
11 2010-01-02 W
12 2010-01-02 W
13 2010-01-02 W
14 2010-01-11 A
15 2010-01-11 A
16 2010-01-11 A
17 2010-01-11 A
18 2010-01-11 A
19 2010-01-11 A
20 2010-01-11 A
21 2010-01-11 A
22 2010-01-11 A
23 2010-01-11 G
24 2010-01-11 G
25 2010-01-11 G
26 2010-01-11 K
27 2010-01-11 K
28 2010-01-11 K
29 2010-01-11 W
30 2010-01-11 W
我希望它看起来像这样:
Date From To
2010-01-02 A W
2010-01-11 A G
2010-01-11 A K
2010-01-11 A W
2010-01-11 W G
2010-01-11 W K
2010-01-11 G K
我不知道
dplyr
或相关包中有自动功能,但我们可以这样做:
library(dplyr)
quux %>%
reframe(setNames(data.frame(t(combn(unique(ID), 2))), c("From", "To")), .by = "Date")
# Date From To
# 1 2010-01-02 A W
# 2 2010-01-11 A G
# 3 2010-01-11 A K
# 4 2010-01-11 A W
# 5 2010-01-11 G K
# 6 2010-01-11 G W
# 7 2010-01-11 K W
数据
quux <- structure(list(Date = c("2010-01-02", "2010-01-02", "2010-01-02", "2010-01-02", "2010-01-02", "2010-01-02", "2010-01-02", "2010-01-02", "2010-01-02", "2010-01-02", "2010-01-02", "2010-01-02", "2010-01-02", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11", "2010-01-11"), ID = c("A", "A", "A", "A", "A", "A", "A", "A", "A", "W", "W", "W", "W", "A", "A", "A", "A", "A", "A", "A", "A", "A", "G", "G", "G", "K", "K", "K", "W", "W")), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30"))