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

如何在R语言中从交叉表或n维数组的维度名组中抽样行列名对?

基于交叉表维度名组的抽样实现(Base R)

步骤1:构造示例交叉表

先还原你提供的交叉表数据:

# 创建带维度名的交叉表矩阵
crosstab <- matrix(
  data = c(10, 15, 20, 25),
  nrow = 2,
  dimnames = list(
    c("吸烟", "非吸烟"),
    c("男性", "女性")
  )
)

步骤2:生成维度名组合向量

不需要嵌套循环,用Base R的interaction()函数可以一行生成所有维度名的笛卡尔积组合,且顺序和矩阵按列展开的c(crosstab)完全匹配:

# 生成"吸烟 男性"格式的维度名组合向量
grouped_dimnames <- as.character(interaction(dimnames(crosstab), sep = " "))

执行后grouped_dimnames的结果为:["吸烟 男性", "非吸烟 男性", "吸烟 女性", "非吸烟 女性"],正好对应概率向量c(crosstab)的顺序。

如果你更习惯用expand.grid()+apply()的组合,也可以这么写:

# 另一种实现方式:生成所有维度组合后拼接字符串
grouped_dimnames <- apply(expand.grid(dimnames(crosstab)), 1, function(x) paste(x[1], x[2], sep = " "))

步骤3:执行抽样

直接将生成的向量和概率传入sample()即可:

# 按指定概率抽取1个结果
sample_result <- sample(x = grouped_dimnames, size = 1, prob = c(crosstab))

概率匹配验证

抽样概率完全符合需求:

  • "吸烟 男性":10/70
  • "非吸烟 男性":15/70
  • "吸烟 女性":20/70
  • "非吸烟 女性":25/70

内容的提问来源于stack exchange,提问作者Aku-Ville Lehtimäki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:35:21