我们来看一下以下数据
data <- tibble(a = letters[1:4], b1 = 10:13, b2 = 10:13,
b3 = c(9, 4, 11, 10), b4 = c(50, 10:12))
min <- 9
max <- 15
data
# A tibble: 4 × 5
a b1 b2 b3 b4
<chr> <int> <int> <dbl> <dbl>
1 a 10 10 9 50
2 b 11 11 4 10
3 c 12 12 11 11
4 d 13 13 10 12
我想创建一个新列is_unexpected
来控制值是否超出min
和max
范围。
当然,下面是一个缓慢的(在编写代码的意义上)方法。由于我有超过4列(都以“b”开始),我希望优化我的代码。我尝试过使用across()
,但没有成功。
data %>%
mutate(is_unexpected =
if_else(b1 < min | b2 < min | b3 < min | b4 < min |
b1 > max | b2 > max | b3 > max | b4 > max,
1, 0)
)
4条答案
按热度按时间xu3bshqb1#
使用
if_any
:或者使用
between
:bihw5rsg2#
使用
across
此处使用
!!
是因为如果 Dataframe 具有 * min * 或 * max * 变量,则使用这些变量而不是全局变量。e5nszbig3#
或者,请检查
创建于2023年1月25日,使用reprex v2.0.2
hjzp0vay4#
使用
base R