如何在R中按`-1`列分组生成含semester列表的DataFrame?
R语言实现分组聚合semester列需求
你需要对现有tibble按-1列分组,聚合出每个分组下major=1对应的semester值(用逗号连接,无符合条件则为NA),同时major列固定为1。
原始数据结构
# A tibble: 52,300 × 3 `-1` semester major <int> <chr> <dbl> 1 353323 0 0 2 353323 1 0 3 353323 2 0 4 353324 0 1 5 353324 1 1 6 353324 2 1 7 353324 3 0 8 353325 0 0 9 353325 1 1 10 353325 2 1
预期结果
`-1` semester major <int> <chr> <dbl> 1 353323 NA 1 2 353324 0,1,2 1 3 353325 1,2 1
解决方案
使用dplyr包的分组聚合功能即可实现,代码如下:
library(dplyr) result_df <- original_df %>% group_by(`-1`) %>% summarise( semester = ifelse( any(major == 1), paste(semester[major == 1], collapse = ","), NA_character_ ), major = 1L ) %>% ungroup()
代码说明
group_by(-1):按-1列对数据分组summarise():执行聚合操作生成新列- 先通过
any(major == 1)判断分组内是否存在符合条件的行,存在则用paste(..., collapse=",")拼接semester值;不存在则返回NA major = 1L:将major列固定为整数类型的1,匹配原始数据类型
- 先通过
ungroup():取消分组状态,得到最终的tibble
若未安装dplyr,先执行install.packages("dplyr")完成安装。
内容的提问来源于stack exchange,提问作者mountainaggie
相关产品推荐
相关产品推荐

