有没有一种方法可以不使用key来创建rowwise()

非常感谢任何指针。

df <- tibble(grp1=rev(LETTERS[1:5]),grp2=letters[11:15],grp3=LETTERS[1:5],
      value=rnorm(5,10,10))

df %>% rowwise %>% mutate(key=paste(sort(c(grp1, grp2)), collapse="")) %>% ungroup()
  grp1  grp2  grp3  value             key
  <chr> <chr> <chr> <chr>             <chr>
1 E     k     A     -3.73984194875213 AE
2 D     l     B     3.25846392371014  BD
3 C     m     C     3.62405652088127  CC
4 B     n     D     6.41520621902784  BD
5 A     o     E     20.1892413026407  AE

更新:tibble包含多个字符向量,但是key应该从grp1grp3列生成。

最佳答案

这是使用pmin/pmap的向量化选项。将第'grp1','grp3'列的每一行的min/maxpmin/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路由

08-24 12:55