You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:52:12