簡體   English   中英

如何使用失敗率對ID進行排名

[英]How to rank ID's using fail percentage

我有一個這樣的數據框

library(plyr)
library(dplyr)

ID <- c("ID001","ID002","ID003","ID004","ID005",
        "ID006","ID007","ID008","ID009","ID010")
Fail <- c(3,7,2,3,9,7,3,2,3,9)
Pass <- c(0,0,4,26,1,1,3,0,9,9)
df <- data.frame(ID,Fail,Pass)

我添加另一列來計算失敗百分比

df$Fail_Percentage <- (df$Fail/(df$Fail+df$Pass))*100

現在,我訂購此數據框並創建一個變量“ Rank”

library(data.table)
df <- df%>%
  arrange(-Fail_Percentage) %>%
  mutate(Rank = rleid(Fail_Percentage))
df

我得到這個輸出

      ID Fail Pass Fail_Percentage Rank
   ID001    3    0       100.00000    1
   ID002    7    0       100.00000    1
   ID008    2    0       100.00000    1
   ID005    9    1        90.00000    2
   ID006    7    1        87.50000    3
   ID007    3    3        50.00000    4
   ID010    9    9        50.00000    4
   ID003    2    4        33.33333    5
   ID009    3    9        25.00000    6
   ID004    3   26        10.34483    7

這里的問題是我以這種方式創建重復的等級。 我想通過優先選擇“失敗”來進行排名。

例如:ID001,ID002,ID008都具有等級1,但是我想通過優先選擇最高通過失敗率來進行排名。 因此,ID002的排名為1,ID001的排名為2,ID008的排名為3。我想這樣做,對其他條目也進行類似的排名。

想要的輸出

          ID Fail Pass Fail_Percentage Rank
       ID002    7    0       100.00000    1
       ID001    3    0       100.00000    2
       ID008    2    0       100.00000    3
       ID005    9    1        90.00000    4
       ID006    7    1        87.50000    5
       ID010    9    9        50.00000    6
       ID007    3    3        50.00000    7
       ID003    2    4        33.33333    8
       ID009    3    9        25.00000    9
       ID004    3   26        10.34483    10

我們怎樣才能做得更好? 有人可以幫助我指出正確的方向嗎?

ID <- c("ID001","ID002","ID003","ID004","ID005",
        "ID006","ID007","ID008","ID009","ID010")
Fail <- c(3,7,2,3,9,7,3,2,3,9)
Pass <- c(0,0,4,26,1,1,3,0,9,9)
df <- data.frame(ID,Fail,Pass)
df$Fail_Percentage <- (df$Fail/(df$Fail+df$Pass))*100

僅使用data.table

df <- setDT(df)[order(-Fail_Percentage, -Fail)][, Rank := 1:.N]

您已經可以通過使用第二個參數進行安排來達到預期的順序:

library(dplyr)

df = structure(list(ID = structure(1:10, .Label = c("ID001", "ID002", 
"ID003", "ID004", "ID005", "ID006", "ID007", "ID008", "ID009", 
"ID010"), class = "factor"), Fail = c(3, 7, 2, 3, 9, 7, 3, 2, 
3, 9), Pass = c(0, 0, 4, 26, 1, 1, 3, 0, 9, 9)), .Names = c("ID", 
"Fail", "Pass"), row.names = c(NA, -10L), class = "data.frame") 

df = df %>%
    mutate(Fail_Percentage = Fail / (Fail + Pass) * 100) %>%
    arrange(-Fail_Percentage, -Fail) %>%
    mutate(Rank = order(-Fail_Percentage))

> df

ID Fail Pass Fail_Percentage Rank
1  ID002    7    0       100.00000    1
2  ID001    3    0       100.00000    2
3  ID008    2    0       100.00000    3
4  ID005    9    1        90.00000    4
5  ID006    7    1        87.50000    5
6  ID010    9    9        50.00000    6
7  ID007    3    3        50.00000    7
8  ID003    2    4        33.33333    8
9  ID009    3    9        25.00000    9
10 ID004    3   26        10.34483   10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM