R中如何基于数值变量阈值序列批量创建多个新逻辑列
解决方案
你不需要逐列手动编写mutate判断语句,利用dplyr对命名列表输入的支持,几行代码就能批量生成1到24阈值对应的所有逻辑列,结果和手动编写完全一致,后续调整阈值范围也只需要改一个参数。
首先加载依赖、构造测试数据:
library(tidyverse) set.seed(1988) test <- tibble( survival = c(sample(1:40,10, replace =T)) )
核心实现代码
直接构造带列名的判断逻辑列表传入mutate即可一次性生成全部目标列:
test_res <- test %>% mutate( setNames( map(1:24, ~ survival > .x), paste0("survival", 1:24) ) )
代码说明
map(1:24, ~ survival > .x):遍历1到24的阈值,为每个阈值生成一个判断逻辑向量,判断当前行survival值是否大于阈值setNames(...):给每个逻辑向量绑定对应的列名,从survival1一直到survival24- 传入
mutate后会自动把列表中每个向量作为新列追加到原数据框,不会修改原有列
结果校验
你可以和手动生成的前两列做一致性校验,确认结果完全匹配:
# 手动生成前两列作为对照 test_manual <- test %>% mutate(survival1 = survival > 1, survival2 = survival > 2) # 对比批量生成的前两列和手动生成结果 identical(select(test_res, survival1, survival2), select(test_manual, survival1, survival2)) # 控制台返回 TRUE,说明结果完全一致
如果后续需要调整阈值范围,比如要扩展到1到60的阈值,只需要把代码里的1:24替换成目标阈值序列即可,不需要逐行新增mutate语句。
内容的提问来源于stack exchange,提问作者agun7
相关产品推荐
相关产品推荐

