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

如何将带频数的DataFrame转换为卡方检验用频数表(dplyr管道实现)

用dplyr管道转换DataFrame适配卡方检验

问题背景

我有如下结构的DataFrame:

structure(list(health_pa = c(0, 0, 1, 1), matt_ne = c("matt_ne", 
"total", "matt_ne", "total"), n = c(425L, 1227L, 14L, 58L)), class = c("rowwise_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -4L), groups = structure(list(
    .rows = structure(list(1L, 2L, 3L, 4L), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), row.names = c(NA, -4L), class = c("tbl_df", 
"tbl", "data.frame"))

需要将其转换为以下宽格式表格,用于卡方检验:

matt_netotal
04251227
11458

请问能否通过dplyr管道实现该转换?


解决方案

完全可以用dplyr管道实现,核心是用tidyr::pivot_wider()函数重塑数据,同时需要先解除原数据的行分组状态:

library(dplyr)
library(tidyr)

# 假设原数据框名为df
df %>%
  ungroup() %>%  # 解除行分组,避免pivot_wider报错
  pivot_wider(
    id_cols = health_pa,  # 指定作为行标识的列
    names_from = matt_ne,  # 指定转为列名的字段
    values_from = n  # 指定填充单元格的数值
  ) %>%
  rename(` ` = health_pa)  # 将行标识列名改为空,匹配目标表格格式

关键步骤说明:

  • ungroup():原数据是rowwise_df(行分组状态),必须先解除分组才能正常执行宽表转换
  • pivot_wider():这是tidyr中专门用于长转宽的函数,完美匹配需求中的结构转换
  • rename():可选步骤,如果需要和目标表格的行标题完全一致,将health_pa列名改为空字符串即可

转换后的表格可以直接传入chisq.test()进行卡方检验。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:42:39