You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

R语言中对lapply函数返回的多组Data Frame按TERM列计算Freq均值的方法

解决方法:合并列表+分组聚合

这问题我熟!咱们用最直观的步骤来搞定:

步骤1:获取所有DataFrame的列表

假设你的生成GO频率的函数叫get_go_freq(),你用lapply批量调用后会得到一个DataFrame的列表,比如:

# 假设your_inputs是你传给lapply的输入向量/列表
df_list <- lapply(your_inputs, get_go_freq)

步骤2:合并所有DataFrame为一个大表

接下来要把列表里的所有小表拼在一起,这里推荐两种常用方法:

  • tidyverse风格(更易读):用dplyr::bind_rows(),自动处理不同TERM的情况:
library(dplyr)
combined_df <- bind_rows(df_list)
  • base R方法(不用额外包):用do.call(rbind, ...)拼接:
combined_df <- do.call(rbind, df_list)

步骤3:按TERM分组计算均值

现在就可以按TERM分组,计算每组Freq的平均值了:

  • tidyverse写法
final_result <- combined_df %>%
  group_by(TERM) %>%
  summarise(mean_freq = mean(Freq, na.rm = TRUE))  # na.rm=TRUE防止缺失值干扰结果
  • base R写法:用aggregate()函数:
final_result <- aggregate(Freq ~ TERM, data = combined_df, FUN = mean, na.rm = TRUE)

举个实际例子

比如你的lapply返回3个DataFrame:

  1. 第一个df:
TERMFreq
GO11
GO25
  1. 第二个df:
TERMFreq
GO23
GO34
  1. 第三个df:
TERMFreq
GO12
GO36

合并后再分组计算均值,最终结果会是:

TERMmean_freq
GO11.5
GO24
GO35

这样不管某个TERM只出现几次,都会自动计算它所有出现记录的平均值~

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

火山引擎 最新活动