R tidyverse 批量判断指定范围列生成汇总指示列的实现方法
R语言多列批量二分类汇总实现方案
你可以直接使用dplyr内置的if_all()和if_any()函数实现需求,两个函数分别用于判断指定列范围的所有列满足条件、任意一列满足条件的逻辑,无需逐个输入列名,同时支持数值、字符等多种类型的判断,适配你提到的不同二分类值场景。
适配0/1数值场景的代码示例
library(tidyverse) # 生成示例数据 set.seed(001) carac1 <- round(runif(100),0) carac2 <- round(runif(100),0) carac3 <- round(runif(100),0) data <- data.frame(carac1,carac2,carac3) # 批量判断指定列范围生成汇总列 data <- data %>% mutate(carac_all = case_when( if_all(carac1:carac3, ~.x == 0) ~ "Always no", if_any(carac1:carac3, ~.x == 1) ~ "yes at least one time", TRUE ~ NA_character_ ))
适配yes/no字符场景的代码示例
如果你的列存储的是字符型的yes/no,只需修改判断条件即可,无需调整逻辑框架:
data <- data %>% mutate(carac_all = case_when( if_all(carac1:carac3, ~.x == "no") ~ "Always no", if_any(carac1:carac3, ~.x == "yes") ~ "yes at least one time", TRUE ~ NA_character_ ))
列范围的灵活指定方式
你可以根据实际列的特征选择范围,适配120个连续列的使用场景:
- 连续列名指定:
起始列名:结束列名,比如col1:col120 - 按列位置指定:
起始列位置:结束列位置,比如2:121(代表从第2列到第121列) - 按列名特征匹配:
starts_with("carac")匹配所有前缀为carac的列,contains("flag")匹配所有名称包含flag的列
内容的提问来源于stack exchange,提问作者Aytan
相关产品推荐
相关产品推荐

