【发布时间】:2017-04-21 05:52:16
【问题描述】:
我有一个这样的数据框
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
我们怎样才能做得更好?有人可以帮我指出正确的方向吗?
【问题讨论】:
-
这三个包有很多重叠的特性和函数名。可能最好坚持一个。 Plyr 已被 dplyr 取代,如果您只需要 rleid 的 data.table...stackoverflow.com/questions/33507868/…
标签: r dataframe data.table dplyr