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

在R语言中如何对列联表每行进行≥4的频数分布与占比分析?

处理列联表中指定行的频数与占比计算

我明白你现在的需求啦——想要从这个由table(People$Gender, People$BooksOwned)生成的列联表中,分别统计不同Gender分组里BooksOwned≥4的频数和占比对吧?其实操作起来很简单,咱们一步步来:

首先先把你的列联表明确下来:

> table(People$Gender, People$BooksOwned)

       -1   3   4   5   6   8  10  12
    0   0   1 125   7 170  73   1   2
    1   2   0  11   0  20  14   1   1

步骤1:把列联表存为变量方便操作

先把生成的列联表赋值给一个变量,这样后续调用和修改都更方便:

tab <- table(People$Gender, People$BooksOwned)

步骤2:筛选出BooksOwned≥4的列

咱们先确定哪些列对应BooksOwned≥4的情况,直接通过列名判断最稳妥(不怕列顺序变动):

# 筛选出列名≥4的列索引
target_cols <- colnames(tab) >= 4

步骤3:计算每行的目标频数

用rowSums函数对每行的目标列求和,就能得到每个Gender分组里BooksOwned≥4的总频数:

# 计算每行的目标频数
freqs <- rowSums(tab[, target_cols])
# 查看结果
freqs
# 输出应该是:
#   0   1 
# 378  47 

步骤4:计算占比

接下来计算每个分组的占比,就是用目标频数除以该行的总数(所有BooksOwned情况的总和),再转成百分比格式:

# 先算每行的总数
row_totals <- rowSums(tab)
# 计算占比并保留两位小数
proportions <- round((freqs / row_totals) * 100, 2)
# 查看结果
proportions
# 输出应该是:
#    0    1 
# 99.48 92.16 

可选:合并成表格展示

如果想让结果更直观,可以把频数和占比合并成一个数据框:

result_df <- data.frame(
  Gender = rownames(tab),
  BooksOwned_4plus_Freq = freqs,
  BooksOwned_4plus_Pct = paste0(proportions, "%")
)

print(result_df)
# 输出会是:
#   Gender BooksOwned_4plus_Freq BooksOwned_4plus_Pct
# 0      0                   378               99.48%
# 1      1                    47               92.16%

单独处理某一行的方法

如果你只需要处理某一行(比如Gender=0的分组),直接提取该行的目标列再计算就行:

# 单独提取Gender=0的目标列数据
gender0_data <- tab["0", target_cols]
# 计算频数
gender0_freq <- sum(gender0_data)
# 计算占比
gender0_pct <- round((gender0_freq / sum(tab["0", ])) * 100, 2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:14:22