我们可以使用if_all 和everything()(选择所有列)来创建逻辑向量
library(dplyr)
data %>%
mutate(new = case_when(if_all(everything(), `>`, 1) ~ ">1", if_all(everything(), `>`, 0.5) ~ ">0.5")
)
-输出
# A tibble: 10 × 3
x y new
<dbl> <dbl> <chr>
1 0.266 0.531 <NA>
2 0.372 0.744 <NA>
3 0.573 1.15 >0.5
4 0.908 1.82 >0.5
5 0.202 0.403 <NA>
6 0.898 1.80 >0.5
7 0.945 1.89 >0.5
8 0.661 1.32 >0.5
9 0.629 1.26 >0.5
10 0.0618 0.124 <NA>
注意:作为对整个数据集指定的 OP,这确实会根据对整个数据集的评估创建列
如果 OP 表示单独的列,请使用 between
data %>%
mutate(across(everything(),
~ case_when(between(.x, 0.5, 1) ~"> 0.5", TRUE ~ "> 1")))
# A tibble: 10 × 2
x y
<chr> <chr>
1 > 1 > 0.5
2 > 1 > 0.5
3 > 0.5 > 1
4 > 0.5 > 1
5 > 1 > 1
6 > 0.5 > 1
7 > 0.5 > 1
8 > 0.5 > 1
9 > 0.5 > 1
10 > 1 > 1
如果我们想单独执行此操作
out <- as.data.frame(data)
out[] <- case_when(data > 0.5 ~ "> 0.5", data > 1 ~ "> 1")