在R中构建学生互动对的日期关联二进制标记数据框
解决R中生成日期-学生对交互宽表的问题
步骤说明
要实现从包含DATE和STUDENT_ID的数据集生成学生对交互宽表,核心是先按日期生成所有无序学生对,再转换为宽格式并填充1/0标记。以下是具体实现代码:
代码实现
首先加载所需工具包:
library(dplyr) library(tidyr) library(combinat)
处理原始数据集df1:
# 1. 按日期生成所有无序学生对,并规范列名格式 student_pairs <- df1 %>% group_by(DATE) %>% summarise( # 先对学生ID排序,确保A-B和B-A被识别为同一对,避免重复 student_pair = combn(sort(unique(STUDENT_ID)), 2, FUN = paste, collapse = "_"), .groups = "drop" ) %>% mutate(interaction_col = paste0("INTERACTION_", student_pair)) %>% select(-student_pair) # 2. 转换为宽格式,未出现的学生对填充0 result <- student_pairs %>% mutate(value = 1) %>% pivot_wider( names_from = interaction_col, values_from = value, values_fill = 0 )
关键细节解释
- 无序对处理:用
sort(unique(STUDENT_ID))确保每个日期下的学生ID按顺序排列,生成的学生对不会出现重复(比如200794_203145和203145_200794会被统一为前者) - 列名规范:通过
paste0("INTERACTION_", student_pair)生成符合需求的列名格式 - 缺失值填充:
values_fill = 0自动为每个日期未出现的学生对填充0,保证所有学生对列都出现在结果中
样例输出验证
针对你提供的原始数据,运行后会得到类似如下结果:
# A tibble: 3 × [列数] DATE INTERACTION_200794_201143 INTERACTION_200794_203145 ... <int> <dbl> <dbl> ... 1 21500001 1 1 ... 2 21500019 1 1 ... 3 21500026 0 0 ...
内容的提问来源于stack exchange,提问作者thedumbkid
相关产品推荐
相关产品推荐

