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

请求统计不同数值出现次数:附R语言生成的游戏矩阵数据

统计R游戏矩阵中不同数值的出现次数

嘿,我看你已经用R生成了游戏行为矩阵,现在想要统计不同决策值(decs列里的1、2、3)的出现次数——尤其是按玩家和游戏场次分组后的统计,对吧?毕竟你给出的示例里已经有decs1_sum这类分组统计列了。下面给你几种实用的实现方法:

方法1:用dplyr快速分组统计(最直观)

先把矩阵转成数据框(操作更方便),然后按players和game分组,直接统计每个组里各决策值的出现次数:

# 加载dplyr包(如果没装先运行install.packages("dplyr"))
library(dplyr)

# 把矩阵转成数据框
game_df <- as.data.frame(gamematrix)

# 分组统计每个组内decs=1、2、3的次数
game_df <- game_df %>%
  group_by(players, game) %>%
  mutate(
    decs1_sum = sum(decs == 1),  # 统计当前组里decs为1的次数
    decs2_sum = sum(decs == 2),
    decs3_sum = sum(decs == 3)
  ) %>%
  ungroup()  # 取消分组

# 看看结果,和你给的示例完全匹配哦
print(game_df)

原理很简单:sum(decs == x)会把逻辑判断结果(TRUE/FALSE)转成1/0,求和就是该值在组内的出现次数。

方法2:用table函数批量处理(适合取值较多的情况)

如果以后decs的取值不止1-3,这种方法更灵活,不用手动写每个值的统计:

library(dplyr)
library(tidyr)  # 需要用到unnest_wider函数

game_df <- as.data.frame(gamematrix)

# 先按分组生成每个组的频率表
group_counts <- game_df %>%
  group_by(players, game) %>%
  summarise(
    # 用factor指定所有可能的取值,避免某个组没有该值时缺失
    decs_counts = list(table(factor(decs, levels = 1:3))),
    .groups = "drop"
  )

# 把频率表拆成单独的列,并改名
group_counts <- group_counts %>%
  unnest_wider(decs_counts, names_sep = "_") %>%
  rename_with(~paste0("decs", ., "_sum"), starts_with("decs_counts_"))

# 把统计结果合并回原数据框
game_df <- game_df %>%
  left_join(group_counts, by = c("players", "game"))

如果只是统计全局总次数

要是你不需要分组,只想知道整个矩阵里1、2、3各自出现了多少次,直接用基础R的table函数就行:

table(gamematrix[, "decs"])

运行后会直接输出每个值的总出现次数,非常快捷。

用你提供的set.seed(5)生成的数据测试,这些方法都能得到和你示例里一致的decs1_sum、decs2_sum、decs3_sum列,放心用就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:58:34