我有一个基于一列(数字列)排序的数据框来分配排名。如果此列值为零,则基于另一个字符列排列数据框,用于那些在数字列中具有零值的行。
但是要给出排名,我必须考虑 var2,这就是我根据 var2 排序的原因,如果这些行的 var2 中有任何相同的值,我必须考虑 var3 来给出排名。请查看数据框 2 和 3 行,var2 值是相同的,在这种情况下我必须考虑 var3 来给出排名。如果 var2 为零,我必须按字母顺序对 var1 列(字符列)进行排序并给出排名。如果 var2 是 NA 没有排名。请参考下面给出的数据框。
下面,数据帧根据 var2 列降序排序,但如果 var2 为零,则 var2 也包含零我必须根据 var1 对 var2 中为零的行对数据帧进行排序。我需要按 var1 对 var2 为零的行进行排序,然后按 var1 的字母顺序排列 NA。
example:
# var1 var2 var3 rank
# 1 c 556 45 1
# 2 a 345 35 3
# 3 f 345 64 2
# 4 b 134 87 4
# 5 z 0 34 5
# 6 d 0 32 6
# 7 c 0 12 7
# 8 a 0 23 8
# 9 e NA
# 10 b NA
below is my code
df <- data.frame(var1=c("c","a","f","b","z","d", "c","a", "e", "b", "ad", "gf", "kg", "ts", "mp"), var2=c(134, NA,345, 200, 556,NA, 345, 200, 150, 0, 25,10,0,150,0), var3=c(65,'',45,34,68,'',73,12,35,23,34,56,56,78,123))
# To break the tie between var3 and var2
orderdf <- df[order(df$var2, df$var1, decreasing = TRUE), ]
#assigning rank
rankdf <- orderdf %>% mutate(rank = ifelse(is.na(var2),'', seq(1:nrow(orderdf))))
如果 var2 值为零(对于那些 var2 值为零的行),则预期的输出是按字母顺序对 var1 进行排序。
expected output:
# var1 var2 var3 rank
# 1 c 556 45 1
# 2 a 345 35 3
# 3 f 345 64 2
# 4 b 134 87 4
# 5 a 0 34 5
# 6 c 0 32 6
# 7 d 0 12 7
# 8 z 0 23 8
# 9 b NA
# 10 e NA