Вот векторизованная опция, использующая pmin/pmap
. Возьмите min/max
для каждого ряда столбцов 'grp1', 'grp3' с pmin/pmax
и объедините вместе (str_c
)
library(dplyr)
library(stringr)
df %>%
mutate(key = str_c(pmin(grp1, grp3), pmax(grp1, grp3)))
# A tibble: 5 x 5
# grp1 grp2 grp3 value key
# <chr> <chr> <chr> <dbl> <chr>
#1 E k A 24.7 AE
#2 D l B 5.66 BD
#3 C m C 16.3 CC
#4 B n D 5.88 BD
#5 A o E -9.22 AE
данные
df <- tibble(grp1=rev(LETTERS[1:5]),grp2=letters[11:15],grp3=LETTERS[1:5],
value=rnorm(5,10,10))
ПРИМЕЧАНИЕ: cbind
преобразуется в matrix
, и матрица может содержать только один класс. Преобразование в tibble
с помощью as_tibble
не меняет класс автоматически. Вместо этого используйте tibble/data.frame
напрямую вместо cbind
route