如何使用dplyr将多列中1、2转为0,3、4转为1?
实现方法
1. 你需要的mutate() + across() + case_when()组合写法
library(tidyverse) result_tbl <- sample_tbl %>% mutate( # 对所有列执行转换 across( .cols = everything(), .fns = ~ case_when( .x %in% c(1, 2) ~ 0L, .x %in% c(3, 4) ~ 1L ) ) )
参数说明:
everything()指定对所有列生效,如果你只要转换部分列,可以替换为对应的列选择规则- 以
~开头的是purrr风格匿名函数,.x指代每一列的单个元素 - 数值后加
L是为了保持输出为整数类型,和原数据格式一致,去掉也能正常运行,输出为数值型
2. 更简洁的逻辑判断写法
因为3、4均满足大于等于3的条件,逻辑值TRUE转整数为1,FALSE转整数为0,可以直接简化为:
result_tbl <- sample_tbl %>% mutate(across(everything(), ~ as.integer(.x >= 3)))
输出结果
执行上述代码后输出和预期一致:
# A tibble: 10 × 10 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> 1 1 0 1 0 0 0 1 0 0 1 2 1 1 1 1 1 1 1 1 0 1 3 0 1 1 1 1 1 0 1 1 0 4 1 1 1 0 0 1 0 0 1 1 5 0 1 0 1 0 1 1 1 0 0 6 1 0 0 1 0 0 1 0 1 0 7 0 1 0 0 1 1 0 1 1 0 8 1 1 0 0 1 0 0 1 0 0 9 0 1 1 0 1 0 0 1 1 0 10 1 0 0 0 0 1 0 1 1 1
内容的提问来源于stack exchange,提问作者r_noobie
相关产品推荐
相关产品推荐

