我有以下数据框:
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
以某种方式重塑这个结果,但是按照那个方法感觉不对。
有更好/更容易的想法吗?谢谢。
as.list
,因为unnest_wider
即使没有它也可以正常工作。 - akrun