R语言统计多列唯一值 生成学生转学次数新列咨询
实现方案
方案1:Base R 实现
直接逐行统计4个时段学校ID的唯一值数量减1,完全匹配你之前单学生的计算逻辑:
# df为你的原始数据集 df$transfer_count <- apply( df[, c("school_ID_1", "school_ID_2", "school_ID_3", "school_ID_4")], 1, function(x) length(unique(x)) - 1 )
方案2:dplyr 实现
适合习惯tidyverse语法的场景,1万行的数据集运行效率无压力:
library(dplyr) df <- df %>% rowwise() %>% mutate( transfer_count = n_distinct(c(school_ID_1, school_ID_2, school_ID_3, school_ID_4)) - 1 ) %>% ungroup()
基于已有哑变量的快速实现
如果你已经生成了相邻时段转学的0/1哑变量(共3个对应4个时段的节点),直接对哑变量列逐行求和即可:
# 示例中假设哑变量列名均以transfer开头,可根据你的实际列名调整筛选规则 df$transfer_count <- rowSums(df[, grepl("^transfer", colnames(df))], na.rm = TRUE)
注意事项
- 若学校ID存在空值,可在
unique()或n_distinct()中添加na.rm = TRUE参数过滤缺失值,避免计数偏差 - 计算结果为0代表4个时段均在同一学校就读,无转学记录
内容的提问来源于stack exchange,提问作者iago nunes
相关产品推荐
相关产品推荐

