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

如何在R中重塑长格式数据并统计各类值的数量

解决R语言长格式字符串数据的计数汇总问题

先构造示例数据

# 还原你的输入数据框
df <- data.frame(
  Location = c("North", "North", "North", "South", "South", "North", "South", "North", "South", "South"),
  Colour = c("red", "blue", "red", "red", "red", "red", "blue", "blue", "red", "red"),
  stringsAsFactors = FALSE
)

方法一:Base R 快速实现

用table()直接生成交叉计数表,再转换为数据框:

# 生成交叉计数表并转为数据框格式
count_table <- as.data.frame.matrix(table(df$Location, df$Colour))
# 将行名转为Location列
count_table$Location <- rownames(count_table)
# 调整列顺序,把Location放在第一列
count_table <- count_table[, c("Location", "red", "blue")]
# 清除行名
rownames(count_table) <- NULL

方法二:dplyr + tidyr 灵活处理(推荐)

先分组统计数量,再转换为宽格式,逻辑清晰易扩展:

library(dplyr)
library(tidyr)

result_df <- df %>%
  # 按Location和Colour分组,统计每组的行数
  count(Location, Colour) %>%
  # 将Colour的不同取值转为列,填充对应的计数,无数据则填0
  pivot_wider(names_from = Colour, values_from = n, values_fill = 0)

方法三:reshape2包的cast方法(适配你之前的尝试)

你之前没成功是因为缺少数值型的计数列,只需先给每行添加一个值为1的列,再用dcast汇总:

library(reshape2)

# 添加计数辅助列
df$count <- 1
# 按Location分组,将Colour转为列,汇总count的和
result_cast <- dcast(df, Location ~ Colour, value.var = "count", fun.aggregate = sum)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:05:19