有没有一种方法可以不使用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
应该从grp1
和grp3
列生成。 最佳答案
这是使用pmin/pmap
的向量化选项。将第'grp1','grp3'列的每一行的min/max
与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
路由