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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:15:05