我有以下数据框架:
dat <- data.frame(id = c("a", "b", "c", "d"),
x1 = c(1, 3, 5, 7),
x2 = c(4, 2, 6, 0),
x3 = c(2, 2, 5, 9))现在,我想计算我的三个x列的每行排名,并将结果存储到我的dat数据框架中。因此,结果可以通过两种方式存储:
( a)理想情况下,会有4支新的列,各自的职级或
( b)将有一个新的嵌套列,我可能需要以某种方式取消嵌套。
我尝试了下面的方法,这至少给了我一个列表列。
dat %>%
rowwise() %>%
mutate(my_ranks = list(rank(c_across(starts_with("x")))))但是当我尝试去嵌套时,它会给我排名,但是它会创建新的行(即每个原始的大小写现在出现四次)。虽然我想我可以用pivot_wider来重塑这个结果,但走这条路是不对的。
有什么更好/更容易的主意吗?谢谢。
发布于 2020-08-21 21:27:33
我想这是一种潮流:
dat %>%
bind_cols(as_tibble(`colnames<-`(t(apply(dat[-1], 1, rank)), paste0("rank_x", 1:3))))
#> id x1 x2 x3 rank_x1 rank_x2 rank_x3
#> 1 a 1 4 2 1.0 3.0 2.0
#> 2 b 3 2 2 3.0 1.5 1.5
#> 3 c 5 6 5 1.5 3.0 1.5
#> 4 d 7 0 9 2.0 1.0 3.0https://stackoverflow.com/questions/63528545
复制相似问题