如何在R语言中按日期将ID列拆分为From和To列构建关联数据框?
问题
我正在进行社交网络分析,需要创建一个关联数据框。现有包含Date和ID两列的数据,希望按日期将ID列拆分为From和To列,以此展示同一天共同出现的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语言实现
核心思路是先按日期提取唯一ID,再生成每个日期下ID的无向两两组合:
library(dplyr) library(tidyr) # 构造原始数据框(替换为你的实际数据读取逻辑) df <- data.frame( Date = c(rep("2010-01-02",13), rep("2010-01-11",17)), ID = c(rep("A",9), rep("W",4), rep("A",9), rep("G",3), rep("K",3), rep("W",2)) ) # 生成目标关联数据框 result <- df %>% distinct(Date, ID) %>% # 按日期去重ID group_by(Date) %>% summarise(pairs = list(t(combn(ID, 2)))) %>% # 生成所有两两无向组合 unnest_wider(pairs, names_sep = "") %>% rename(From = pairs1, To = pairs2) %>% ungroup() print(result)
方法二:Python(Pandas)实现
利用分组和迭代器生成组合,再拼接成结果:
import pandas as pd from itertools import combinations # 构造原始数据(替换为你的实际数据读取逻辑) data = { "Date": ["2010-01-02"]*13 + ["2010-01-11"]*17, "ID": ["A"]*9 + ["W"]*4 + ["A"]*9 + ["G"]*3 + ["K"]*3 + ["W"]*2 } df = pd.DataFrame(data) # 定义分组处理函数 def generate_pairs(group): unique_ids = group["ID"].unique() return pd.DataFrame(combinations(unique_ids, 2), columns=["From", "To"]) # 分组生成组合并整理结果 result = df.groupby("Date").apply(generate_pairs).reset_index(level=1, drop=True).reset_index() print(result)
内容的提问来源于stack exchange,提问作者Nadine Hussein
相关产品推荐
相关产品推荐

