【问题标题】:Ranking based on two variables基于两个变量的排名
【发布时间】:2017-03-15 11:09:32
【问题描述】:

我需要根据两个变量对行进行排名,但我无法理解它。

测试数据如下:

df <- data.frame(A = c(12,35,55,7,6,NA,NA,NA,NA,NA), B = c(NA,12,25,53,12,2,66,45,69,43))

A  B
12 NA
35 12
55 25
7  53
6  12
NA 2
NA 66
NA 45
NA 69
NA 43

我想计算第三个变量 C,当 A!=NA 时它等于 A。当 A==NA 然后 C==B 时,但 C 分数应始终遵循 A==NA 的行不应超过 A!=NA 的行。

在上面的数据中,Max(A) 应该等于 max(C),而 max(B) 只能保存第六高的 C 值,因为 A 有五个非 NA 值。如果 A ==NA 且 B 的排名超过 A!=NA 的行,则应进行某种形式的转换,以确保 A!=NA 行在最终 C 分数中始终高于 B 行

我希望结果看起来像这样:

A  B  C 
55 25 1
35 12 2  
12 NA 3 
7  53 4
6  12 5
NA 69 6
NA 66 7
NA 45 8
NA 43 9
NA 2  10

到目前为止,我能得到的最接近的是

df$C <- ifelse(is.na(df$A), min(df$A, na.rm=T)/df$B, df$A)

但是当 A==NA 时排名倒置,所以 B==2 排名第 6 而不是 B==69

A  B  C 
55 25 1
35 12 2  
12 NA 3 
7  53 4
6  12 5
NA 2  6
NA 43 7
NA 45 8
NA 66 9
NA 69 10 

我不确定我是否可以使用某种重量?

非常感谢任何建议!谢谢!

【问题讨论】:

    标签: r sorting ranking rank


    【解决方案1】:

    你可以试试:

     df$C <- order(-df$A)
     df[is.na(df$A),"C"] <- sort.list(order(-df[is.na(df$A),"B"]))+length(which(!is.na(df$A)))
    

    以及 C 的顺序:

    df[order(df$C),]
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      相关资源
      最近更新 更多