如何高效计算列表中所有DataFrame指定列的求和向量?
批量计算列表中DataFrame指定列的求和结果
我有一个包含多个DataFrame的列表,示例代码如下:
df1 <- data.frame(c(1:10), c(11:20), c(31:40), c(1,2)) colnames(df1) <-c("a","b","c","d") df2 <- data.frame(c(2:11), c(12:21), c(31:40), c(1,1)) colnames(df2) <-c("a","b","c","d") df3 <- data.frame(c(1:12), c(11:22), c(31:42), c(2,2)) colnames(df3) <-c("a","b","c","d") mylist <- list(df1,df2,df3) names(mylist) <- c("ID_1", "ID_2", "ID_3")
需求是生成一个向量,包含该列表中所有DataFrame的d列求和结果。当前手动逐个求和的方法可行,但列表中DataFrame数量较多,需要更高效的实现方式。
高效解法
方法1:基础R原生实现(lapply + unlist)
unlist(lapply(mylist, function(x) sum(x$d)))
通过lapply遍历列表内每个DataFrame,对d列求和后,用unlist将结果转换为带原列表名称的数值向量,无需额外安装包。
方法2:tidyverse风格(purrr包的map_dbl)
# 未安装purrr时先执行安装 # install.packages("purrr") library(purrr) map_dbl(mylist, ~sum(.x$d))
map_dbl会直接返回数值型向量,代码更简洁直观,适合习惯tidyverse生态的用户。
方法3:基础R简化写法(sapply)
sapply(mylist, function(x) sum(x$d))
sapply是lapply的简化版本,会自动将结果简化为向量,写法更紧凑,同样基于基础R实现。
内容的提问来源于stack exchange,提问作者OK_4711
相关产品推荐
相关产品推荐

