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

使用purrr的map函数对多时间点变量迭代执行统计分析问题

R纵向重复测量数据集批量操作方案

1. 批量数值变量正态性检验输出结果数据框

shapiro.test返回的是htest类列表,无法直接用map_dfr绑定,需要先通过broom包的tidy函数转换为单行结构化结果,再进行合并:

library(tidyverse)
library(broom)

# 替换your_data为你的数据集名
shapiro_result <- your_data %>% 
  select(where(is.numeric)) %>% # 自动筛选所有数值型变量
  map_dfr(~ shapiro.test(.x) %>% tidy(), .id = "variable_name")

输出结果直接包含变量名、统计量、p值、置信区间等标准化字段,可直接导出为csv使用。

2. 同变量多时间点批量配对t检验

首先提取所有重复测量变量的公共前缀(去掉_vxx时间后缀),再按前缀匹配对应时间点的列执行检验:

# 提取所有变量的公共前缀
var_prefixes <- str_remove(names(your_data), "_v[0-9]+$") %>% unique()
# 可手动过滤非重复测量的变量前缀,比如ID、性别这类单时间点变量

# 以6个月(v66)和基线(v00)的配对t检验为例
t_test_result <- var_prefixes %>% 
  set_names() %>% 
  map_dfr(function(prefix) {
    baseline <- your_data[[paste0(prefix, "_v00")]]
    time_col <- your_data[[paste0(prefix, "_v66")]]
    t.test(baseline, time_col, paired = TRUE) %>% tidy()
  }, .id = "variable_prefix")

# 导出结果
write_csv(t_test_result, "配对t检验结果.csv")

如果需要做12个月(v01)和基线的检验,只需把代码中的_v66替换为_v01即可。

3. 批量生成基线差值列

使用dplyr的across功能配合动态命名规则,可一次性生成所有时间点的差值列,无需重复写mutate语句:

your_data <- your_data %>% 
  mutate(
    # 生成6个月与基线的差值列
    across(ends_with("_v66"), 
           ~.x - get(str_replace(cur_column(), "_v66$", "_v00")),
           .names = "d_{str_remove(.col, '_v66$')}_v66"),
    # 生成12个月与基线的差值列
    across(ends_with("_v01"), 
           ~.x - get(str_replace(cur_column(), "_v01$", "_v00")),
           .names = "d_{str_remove(.col, '_v01$')}_v01")
  )

生成的新列完全符合d_变量名_时间点的命名规则,可直接用于后续分析。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:42:02