如何在tidyverse中通过映射高效统计mtcars多列达标行数?
批量统计mtcars各变量中大于指定行数值的行数
方法1:使用dplyr的across(推荐,更简洁)
这种方法利用dplyr的批量处理函数across,无需额外循环或map,直接在管道中完成所有变量的统计:
library(tidyverse) # 获取第6行(Valiant)作为参考值 reference <- mtcars %>% slice(6) # 生成包含所有变量计数的宽格式tibble result <- mtcars %>% summarise( across( everything(), # 处理所有变量 ~ sum(.x > reference[[cur_column()]]) # 统计当前变量大于对应参考值的行数 ) ) result
方法2:使用purrr的map_dfc
如果你更倾向于用map系列函数实现,可通过map_dfc批量处理每个变量并按列合并结果:
library(tidyverse) reference <- mtcars %>% slice(6) # 获取所有变量名称 var_names <- names(mtcars) # 批量处理每个变量,合并为tibble counts_tibble <- map_dfc(var_names, function(var) { mtcars %>% filter(.data[[var]] > reference[[var]]) %>% count() %>% pull() %>% set_names(var) }) counts_tibble
说明
- 两种方法都能自动处理所有变量,无需为每个变量重复编写筛选、计数代码,适合处理上百个变量的场景。
reference[[cur_column()]]和.data[[var]]都是为了实现动态变量引用,确保每个变量匹配对应行的参考值。
内容的提问来源于stack exchange,提问作者Alex Shpenev
相关产品推荐
相关产品推荐

