根据 R 中同一天出现的情况将 1 列分成 2 列?

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

我正在尝试进行社交网络分析并创建关联数据框架。我有 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
r dplyr associations
1个回答
0
投票

我不知道

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