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

如何用reshape2的dcast函数生成与原数据框行数一致的结果?

解决方法

要生成和原数据框行数一致的结果,你需要避免dcast的默认聚合行为——它会对相同的分组键(这里是aa)合并统计。可以通过以下几种方式实现:

方法1:给原数据添加唯一行标识,再用dcast

先给每行加一个唯一的id,让dcast按id分组(每个分组仅一行),这样就不会合并行:

library(reshape2)
dat = data.frame(aa = c('A', 'B', 'C', 'C', 'B'))
# 添加唯一行id
dat$id <- 1:nrow(dat)
# 用dcast生成结果,最后去掉id列
result <- dcast(dat, id ~ aa, fun.aggregate = length, value.var = "aa")
result <- result[, -1]

输出结果:

A B C
1 1 0 0
2 0 1 0
3 0 0 1
4 0 0 1
5 0 1 0

方法2:用model.matrix直接生成独热编码

这是更简洁的方式,无需额外分组:

model.matrix(~ aa - 1, data = dat)

输出结果(列名默认带前缀aa,可自行修改):

aaA aaB aaC
1   1   0   0
2   0   1   0
3   0   0   1
4   0   0   1
5   0   1   0

方法3:用tidyr的pivot_wider(推荐,reshape2的现代替代)

如果可以切换到tidyverse工具链,pivot_wider更直观:

library(tidyr)
library(dplyr)

dat %>% 
  mutate(id = row_number(), val = 1) %>% 
  pivot_wider(names_from = aa, values_from = val, values_fill = 0) %>% 
  select(-id)

输出和方法1完全一致。

内容的提问来源于stack exchange,提问作者Brian Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:50:24