如何在数据框列表中按pred列分组统计各因子观测行数
解决数据框列表的因子计数问题
核心问题原因
count()函数仅支持单个数据框作为输入,直接作用于列表会触发类型不匹配错误,因此需要遍历列表中的每个数据框,逐个执行计数操作。
方法1:dplyr + purrr(推荐,符合你的使用习惯)
利用purrr的map系列函数实现列表迭代,结合dplyr的count完成统计:
- 加载依赖包
library(dplyr) library(purrr)
- 对列表中每个数据框单独计数
假设你的数据框列表名为df_list,执行以下代码:
# 得到每个数据框的计数结果组成的新列表 result_list <- map(df_list, ~count(.x, pred))
result_list中的每个元素对应原列表中一个数据框的pred因子计数,格式和单个数据框的输出完全一致。
- 合并所有结果为单个数据框(可选)
如果需要把所有数据框的计数结果合并,并标记来源,使用map_dfr:
result_combined <- map_dfr(df_list, ~count(.x, pred), .id = "df_id")
新增的df_id列会标记每个计数来自原列表中的第几个数据框(若原列表有命名,则使用列表名称作为值)。
方法2:Base R(无需额外包)
用基础R的lapply实现遍历:
# 得到单个计数结果组成的列表 result_list_base <- lapply(df_list, function(df) count(df, pred)) # 合并为单个数据框并标记来源 result_combined_base <- do.call(rbind, Map(cbind, df_id = if(is.null(names(df_list))) seq_along(df_list) else names(df_list), lapply(df_list, function(df) count(df, pred)) ) )
内容的提问来源于stack exchange,提问作者MM1
相关产品推荐
相关产品推荐

