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

R语言使用tidyr::spread或reshape2::dcast按id统计特征出现次数

R长表转宽表统计频次解决方案

核心报错原因

  • 原数据未提前生成计数字段,长宽转换时没有可直接映射到单元格的数值列
  • reshape2::dcast调用sum聚合时,默认取字符类型的feature作为值列,数值运算无法作用于字符输入
  • tidyr::spread报错是因为key/value参数配置错误,且没有唯一键标识每行的映射关系

解决方案

方案1:tidyverse 实现(官方推荐)

pivot_wider是tidyr官方推出替代spread的函数,稳定性更强:

library(tidyverse)

# 先统计每个id+feature组合的出现次数,再转宽表
df %>%
  count(id, feature) %>%
  pivot_wider(
    names_from = feature,
    values_from = n,
    values_fill = 0 # 未出现的特征默认填充为0
  )

# 若需使用spread语法实现
df %>%
  count(id, feature) %>%
  spread(key = feature, value = n, fill = 0)

方案2:reshape2::dcast 实现

不需要提前计数,直接指定聚合函数为length统计分组行数即可,不需要用sum:

library(reshape2)
dcast(
  df,
  id ~ feature,
  fun.aggregate = length,
  value.var = "feature"
)

两种方案输出结果一致,行对应id、列对应feature,单元格值为对应id下该feature的出现次数,未出现的feature值为0。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:27:01