样本df:
set.seed(1)
df <- tibble(name = fruit[1:10],
A = rpois(10, 10),
B = rpois(10, 2),
C = rpois(10, 6),
D = rpois(10, 2))
name A B C D A_rank AB_rank ABC_rank ABCD_rank
1 apple 8 1 8 2 9 9 8 7
2 apricot 10 1 7 3 7 7 4 5
3 avocado 7 0 8 0 10 10 9 10
4 banana 11 1 3 2 4 5 9 9
5 bell pepper 14 4 7 3 1 1 1 1
6 bilberry 12 1 5 3 3 3 4 5
7 blackberry 11 2 8 2 4 3 3 3
8 blackcurrant 9 2 7 4 8 7 4 4
9 blood orange 14 2 8 2 1 2 2 2
10 blueberry 11 1 6 1 4 5 4 7
这是基于我问previously的问题,我想在此进行逐行计算,以逐步累积每一列的总和来计算等级,其中较高的总和=较低的等级。
df <- bind_cols(df, apply(-apply(df[, -1], 1, cumsum), 1, min_rank) %>%
as_tibble() %>%
rename(A_rank = A, AB_rank = B, ABC_rank = C, ABCD_rank = D))
但是,我现在想要的是结合基于R或dplyr不提供的基于规则的自定义平局决胜功能。在每个等级计算中,我的决胜局功能的规则是:
因此,在我的df中,仅针对A
查看第一级计算:
df %>% select(name, A, A_rank) %>% arrange(A_rank)
name A A_rank
1 bell pepper 14 1
2 blood orange 14 1
3 bilberry 12 3
4 banana 11 4
5 blackberry 11 4
6 blueberry 11 4
7 apricot 10 7
8 blackcurrant 9 8
9 apple 8 9
10 avocado 7 10
在这里,正如我们刚开始排名第一时,得分并列的水果使用min_rank
,这很好,因为没有更多信息。
将逐行列A
和B
相加后:
df %>% select(name, A, B, AB_rank) %>% arrange(AB_rank)
name A B AB_rank
1 bell pepper 14 4 1
2 blood orange 14 2 2
3 bilberry 12 1 3
4 blackberry 11 2 3
5 banana 11 1 5
6 blueberry 11 1 5
7 apricot 10 1 7
8 blackcurrant 9 2 7
9 apple 8 1 9
10 avocado 7 0 10
在这里,对于水果bilberry
和blackberry
,它们各自在一个列中的编号要比另一种水果高,因此仍然有平局,我想继续讲第二条规则,其中bilberry
会排名3
,因为它们在A
列中具有较高的数字12,而blackberry
会排名4
。
对于banana
和blueberry
,由于在应用我的两个规则后仍将保持平局,因此请使用min_rank,在这里很好。
预期产量
name A B AB_rank
1 bell pepper 14 4 1
2 blood orange 14 2 2
3 bilberry 12 1 3
4 blackberry 11 2 4
5 banana 11 1 5
6 blueberry 11 1 5
7 apricot 10 1 7
8 blackcurrant 9 2 8
9 apple 8 1 9
10 avocado 7 0 10
现在,使用A
,B
,C
的总和:
df %>% select(name, A, B, C, ABC_rank) %>% arrange(ABC_rank)
name A B C ABC_rank
1 bell pepper 14 4 7 1
2 blood orange 14 2 8 2
3 blackberry 11 2 8 3
4 apricot 10 1 7 4
5 bilberry 12 1 5 4
6 blackcurrant 9 2 7 4
7 blueberry 11 1 6 4
8 apple 8 1 8 8
9 avocado 7 0 8 9
10 banana 11 1 3 9
水果apricot
,bilberry
,blackcurrant
和blueberry
的总和相同。应用第一个规则,blueberry
会成为第7级,因为它们没有编号,这是A
,B
,C
这三列中最高的。然后,其余三个水果的得分最高,因此bilberry
的排名为4,因为该水果在A
中的得分最高,为12,然后是apricot
,其排名为5。它的数字为10,那么黑醋栗的等级为6。
看avocado
和banana
,banana
将排在第9位,因为它们在列avacado
和{中有两个大于A
的值{1}},而鳄梨将升为10级。
预期产量
B
这非常复杂,我不确定解决此问题的最佳解决方案是什么。可能有一些if else语句?