R语言如何通过循环对多个dataframe应用unique函数输出统一统计结果
R 批量统计多个数据框首列唯一值数量实现方案
以下两种实现方案都可以满足批量处理需求,支持任意数量的数据框输入,不需要逐行写统计逻辑。
基础R实现(无需安装额外依赖)
# 1. 匹配所有命名规则为df+数字的目标数据框,如果你有自定义命名的 data.frame 可以直接手动构造这个向量,比如 df_list <- c("mydf1","mydf2","testdf") df_list <- ls(pattern = "^df\\d+$") # 2. 批量计算每个数据框第一列的唯一值数量 unique_counts <- sapply(df_list, function(x) { length(unique(get(x)[, 1])) }) # 3. 转换为你需要的输出格式 output <- data.frame( Index = "Unique.ID", t(unique_counts), row.names = NULL ) # 查看结果 print(output)
运行后输出和你预期的格式完全一致:
Index df1 df2 1 Unique.ID 7 10
tidyverse 实现(语法更简洁)
如果你习惯使用tidyverse生态工具,可以用purrr包实现:
library(purrr) library(tibble) # 匹配目标数据框 df_names <- ls(pattern = "^df\\d+$") # 批量计算并按列拼接结果 count_df <- map_dfc(set_names(df_names), ~length(unique(get(.x)[,1]))) # 增加Index列得到最终结果 output <- add_column(count_df, Index = "Unique.ID", .before = 1)
自定义调整说明
- 如果你的数据框不是以
df+数字规则命名,只需要修改第一步的df_list/df_names向量,把你需要处理的所有数据框的对象名以字符串形式放入向量即可。 - 如果需要统计的不是第一列,把代码里的
[,1]替换为对应列的索引或者列名字符串,比如[,"Bird_ID"]即可。
内容的提问来源于stack exchange,提问作者Andre230
相关产品推荐
相关产品推荐

