我有这样一个数据框(df):
group col1 col2
x a 22
x a 23
x b 16
x b 18
y a 11
y a 12
y a 16
y a 45
y b 24
所需的输出是:
group col1 col2 rank
x a 22 1
x a 23 2
x b 16 0
x b 18 0
y a 11 1
y a 12 2
y a 16 3
y a 45 4
y b 24 0
即
如何使用R做到这一点?我会很高兴为您提供任何帮助。非常感谢。
最佳答案
你可以试试
library(dplyr)
df %>%
group_by(group, col1) %>%
mutate(rank=replace(min_rank(col2), col1=='b',0) )
# group col1 col2 rank
#1 x a 22 1
#2 x a 23 2
#3 x b 16 0
#4 x b 18 0
#5 y a 11 1
#6 y a 12 2
#7 y a 16 3
#8 y a 45 4
#9 y b 24 0
如果您不希望出现平局时的等级差距,请将
min_rank
替换为dense_rank
或者,代替
replace
res <- df %>%
group_by(group, col1) %>%
mutate(rank=(col1!='b')*min_rank(col2))
as.data.frame(res) #would be `data.frame`
# group col1 col2 rank
#1 x a 22 1
#2 x a 23 2
#3 x b 16 0
#4 x b 18 0
#5 y a 11 1
#6 y a 12 2
#7 y a 16 3
#8 y a 45 4
#9 y b 24 0
关于通过分组(以另一个变量为条件)对列进行R排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29060467/