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

在R中创建统计汇总表格、解决新变量报错及工具包推荐

问题解答

1. 创建包含连续/分类变量统计量的表格

连续变量(年龄、体重)

可以结合dplyr和tidyverse工具计算自定义统计量,示例代码如下:

# 生成示例数据
set.seed(123)
df <- data.frame(
  age = rnorm(100, 30, 5),
  weight = rnorm(100, 65, 8),
  gender = sample(c("男", "女"), 100, replace = TRUE),
  education = sample(c("初中", "高中", "大学"), 100, replace = TRUE, prob = c(0.2, 0.3, 0.5))
)

# 计算连续变量的均值、标准差、95%置信区间
continuous_stats <- df %>%
  select(age, weight) %>%
  summarise(across(everything(), list(
    mean = ~mean(., na.rm = TRUE),
    sd = ~sd(., na.rm = TRUE),
    ci_lower = ~mean(., na.rm = TRUE) - qt(0.975, df = n()-1)*sd(., na.rm = TRUE)/sqrt(n()),
    ci_upper = ~mean(., na.rm = TRUE) + qt(0.975, df = n()-1)*sd(., na.rm = TRUE)/sqrt(n())
  ))) %>%
  pivot_longer(everything(), names_sep = "_", names_to = c("variable", "stat")) %>%
  pivot_wider(names_from = stat, values_from = value)

print(continuous_stats)

分类变量(性别、教育程度)

计算绝对频数、相对频数、累积频数,示例代码:

# 分类变量频数统计
categorical_stats <- df %>%
  select(gender, education) %>%
  map_dfr(function(col) {
    freq <- table(col)
    rel_freq <- prop.table(freq)*100
    cum_freq <- cumsum(rel_freq)
    tibble(
      variable = rep(deparse(substitute(col)), length(freq)),
      category = names(freq),
      absolute_freq = as.integer(freq),
      relative_freq = round(rel_freq, 1),
      cumulative_freq = round(cum_freq, 1)
    )
  }, .id = NULL)

print(categorical_stats)

后续可使用gt或flextable包对表格进行美化输出。

2. 解决"variable not found"错误

出现该错误的常见原因及对应解决方法:

  • 变量归属环境错误:如果变量是数据框的列,调用时需添加数据框前缀(如df$new_var),或用with(df, ...)包裹代码,避免直接调用列名。
  • 拼写/大小写错误:R对大小写敏感,核对变量名的拼写和大小写,比如NewVar和newvar会被识别为两个不同变量。
  • 管道链中断:用%>%生成新变量时,若未将结果赋值给新数据框,变量仅在管道内临时存在。正确写法:
    # 错误写法:new_var仅在管道内有效
    df %>% mutate(new_var = age + 10)
    print(new_var)
    
    # 正确写法:赋值给新数据框
    df_new <- df %>% mutate(new_var = age + 10)
    print(df_new$new_var)
    
  • 函数环境隔离:自定义函数内生成的变量默认不会暴露到全局环境,需用return()返回结果,或明确赋值到全局环境(不推荐)。
  • 生成逻辑错误:若生成变量时用到含NA的列,可能导致变量未正确生成,检查mutate语句逻辑,必要时添加na.rm = TRUE参数。

3. 统计表格常用R包及实现方式

通用类包

  • tableone:专为基线表设计,支持同时处理连续和分类变量:
    library(tableone)
    vars <- c("age", "weight", "gender", "education")
    cat_vars <- c("gender", "education")
    tab <- CreateTableOne(vars = vars, factorVars = cat_vars, data = df)
    print(tab, showAllLevels = TRUE)
    
  • gt:用于美化表格,配合tidyverse计算的统计量生成专业格式表格:
    library(gt)
    continuous_stats %>% gt() %>% 
      tab_header(title = "连续变量描述统计") %>%
      fmt_number(columns = c(mean, sd, ci_lower, ci_upper), decimals = 1)
    

连续变量专用实现

  • dplyr + tidyr:灵活计算自定义统计量,适合个性化需求(如前文的置信区间计算)。
  • psych:describe()函数快速生成基础描述统计,包含均值、标准差、中位数等:
    library(psych)
    describe(df[, c("age", "weight")])
    

分类变量专用实现

  • janitor:tabyl()函数一键生成频数、相对频数表格,支持快速整理:
    library(janitor)
    df %>% tabyl(gender) %>% adorn_pct_formatting() %>% adorn_totals("row")
    
  • dplyr + tidyr:用table()、prop.table()结合tidyverse函数手动整理频数表(如前文示例)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:43:27