跨列的按行操作

Rowwise operations across columns

很惊讶我以前从未遇到过这个问题...

使用 dplyr 进行跨列操作的正确方法是什么?我想获得在#2 中计算的按行运算。但是,随着操作变得越来越复杂并涉及多个列,这变得不切实际。按照#1 的思路编写更简洁的语法的合适方法是什么?

library(dplyr)

#1

data.frame(a = c(1:5, 6:10),
           b = c(6:10, 1:5)) %>% 
mutate(MAX_COLUMN = max(a, b))

#2

data.frame(a = c(1:5, 6:10),
               b = c(6:10, 1:5)) %>% 
      mutate(MAX_COLUMN = ifelse(a > b, a, b))

对于通用解决方案添加 rowwise :

library(dplyr)

data.frame(a = c(1:5, 6:10),
           b = c(6:10, 1:5)) %>% 
  rowwise() %>%
  mutate(MAX_COLUMN = max(c_across(a:b)))

#      a     b MAX_COLUMN
#   <int> <int>      <int>
# 1     1     6          6
# 2     2     7          7
# 3     3     8          8
# 4     4     9          9
# 5     5    10         10
# 6     6     1          6
# 7     7     2          7
# 8     8     3          8
# 9     9     4          9
#10    10     5         10

如果您想选择最大值,更快的选择是 pmaxdo.call

data.frame(a = c(1:5, 6:10),
           b = c(6:10, 1:5)) %>% 
  mutate(MAX_COLUMN = do.call(pmax, .))