请求统计不同数值出现次数:附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
相关产品推荐
相关产品推荐

