dcast使用问题:idvars不唯一时保留匹配行并合并同组字段值
解决方案
方法1:tidyverse实现(可读性最高)
# 加载依赖包 library(dplyr) # 样例数据构造,你实际使用时替换为导入的Excel数据即可 df <- data.frame( Student = c("Arnav", "Arnav", "Beth", "Chuo", "Beth", "Beth", "Chuo"), Day = c("Mon", "Mon", "Mon", "Mon", "Tues", "Tues", "Tues"), Clothes = c("red shirt", "blue pants", "dress", "dress", "green shirt", "blue pants", "dress") ) # 按学生、日期分组,合并同组的衣物为逗号分隔字符串 result <- df %>% group_by(Student, Day) %>% summarise(Clothes = paste(Clothes, collapse = ", "), .groups = "drop")
.groups = "drop"参数用于处理完成后自动取消分组,避免后续操作受分组属性影响,输出结果完全匹配你给出的预期样式。
方法2:reshape2::dcast实现(适配你查询的dcast相关功能)
之前使用dcast报错是因为默认没有指定重复id的聚合规则,新增聚合函数参数即可实现需求:
library(reshape2) result <- dcast( df, Student + Day ~ ., value.var = "Clothes", fun.aggregate = paste, collapse = ", " ) # 修改dcast默认生成的第三列列名 colnames(result)[3] <- "Clothes"
方法3:data.table实现(适合十万行以上的大数据量场景,性能最优)
library(data.table) # 将数据框转为data.table格式 setDT(df) # 按学生、日期分组聚合 result <- df[, .(Clothes = paste(Clothes, collapse = ", ")), by = .(Student, Day)]
内容的提问来源于stack exchange,提问作者dunkindonts
相关产品推荐
相关产品推荐

