我需要根据两个变量对行进行排名,而我无法绕过它。
以下测试数据:
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
我想计算第三个变量,当A!= NA时,C等于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
我不确定我是否可以使用某种重量?
非常感谢任何建议!谢谢!
答案 0 :(得分:0)
您可以尝试:
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),]