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

从tibble列表提取指定系数(含p值):Base R与purrr实现方案

解决方案:从tibble列表中提取指定行并保留列表名称

问题需求

给定一个包含多个tibble的列表,需要批量提取每个tibble中term为time和grup_int的行,保留term、p.value字段,并将每个tibble的列表名称作为新列Var。以下提供两种实现方案:


方案一:Base R(apply系列函数)

使用Map函数同时遍历列表和对应的名称,结合Base R原生操作完成筛选与合并:

# 定义要提取的目标term
selected_terms <- c("time", "grup_int")

# 遍历列表并处理每个tibble
result_base <- Map(function(df, name) {
  # 筛选指定term的行,提取目标列
  subset_df <- df[df$term %in% selected_terms, c("term", "p.value")]
  # 添加Var列存储当前tibble的列表名称
  subset_df$Var <- name
  # 调整列顺序为Var、term、p.value
  subset_df[, c("Var", "term", "p.value")]
}, sample, names(sample))

# 合并所有子数据框为一个整体
result_base <- do.call(rbind, result_base)
# 可选:转换为tibble格式
result_base <- as_tibble(result_base)

运行结果示例:

# A tibble: 6 × 3
  Var   term     p.value
  <chr> <chr>      <dbl>
1 ppara time     0.953  
2 ppara grup_int 0.373  
3 ppard time     0.0669 
4 ppard grup_int 0.458  
5 pparg time     0.721  
6 pparg grup_int 0.614  

方案二:purrr::map系列函数

结合purrr的map2_df函数(自动合并结果)和dplyr管道操作,代码更简洁直观:

library(purrr)
library(dplyr)

# 定义要提取的目标term
selected_terms <- c("time", "grup_int")

# 遍历列表并处理,自动合并为最终tibble
result_purrr <- map2_df(sample, names(sample), function(df, name) {
  df %>%
    filter(term %in% selected_terms) %>%  # 筛选指定term的行
    select(term, p.value) %>%             # 提取目标字段
    mutate(Var = name) %>%                # 添加列表名称列
    relocate(Var)                         # 将Var列移至首位
})

运行结果与Base R方案完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:20:28