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

如何从牌组抽5张牌并统计四条出现次数?R代码求助

统计抽牌中四条(Four of a Kind)的出现次数

问题背景

你已经完成了10000次5张牌的抽样,现在需要统计其中出现四条(即某一牌面恰好出现4次)的行数。

解决方案

下面提供两种实现方式,分别基于Base R和Tidyverse工具集:


方法1:Base R 实现

直接对数据框的每一行计算牌面出现的频率,判断是否存在频率为4的情况:

# 确保df是正确的基础数据框
df <- data.frame(output)

# 定义函数检查单行是否为四条
is_four_of_a_kind <- function(row) {
  freq <- table(row)
  any(freq == 4)
}

# 统计符合条件的行数
four_of_a_kind_count <- sum(apply(df, 1, is_four_of_a_kind))

# 输出结果
cat("四条出现的次数:", four_of_a_kind_count, "\n")

方法2:Tidyverse 实现

如果你习惯用tidyverse语法,可按以下方式处理:

# 先安装并加载tidyverse包(首次使用需运行install.packages("tidyverse"))
library(tidyverse)

# 将抽样矩阵转为tibble格式
df <- as_tibble(output)

# 按行统计牌面频率,筛选并计数四条的行数
four_of_a_kind_count <- df %>%
  rowwise() %>%
  mutate(freq_list = list(table(c_across(everything())))) %>%
  filter(any(freq_list == 4)) %>%
  nrow()

# 输出结果
print(four_of_a_kind_count)

额外优化建议

你当前的numbers2向量中每个牌面重复了5次(比如Ace出现5次),但真实一副牌里每个牌面仅对应4种花色。若要模拟真实牌局,建议修正牌组定义:

# 标准13种牌面
numbers <- c("Ace", "Two", "Three", "Four", "Five", "Six", "Seven", 
             "Eight", "Nine", "Ten", "Jack", "Queen", "King")
# 生成52张标准牌组(每个牌面4张)
numbers2 <- rep(numbers, times = 4)

这样抽样时不会出现同一牌面超过4张的情况,更贴合实际场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:35:20