繁体   English   中英

用多列+排名列排列数据框

[英]Arrange data frame with multiple columns + rank column

我已经用排列 function (dplyr) 对数据框进行了排序

数据框

如何添加显示数据框排名的列? (不跳任何数字)

例如

第 2 行和第 3 行完全相同,因此都具有 2 级

第 4 行和第 5 行在 A 列和 B 列中相同,但在 C 列中不同所以

第 4 行:排名 3
第 5 行:第 4 行

您可以按行粘贴所有值并使用match创建rank列。 如果您的 dataframe 被称为df尝试:

vec <- do.call(paste, c(df, sep = '-'))
df$rank <- match(vec, unique(vec))
df

#  X1 X2 X3 X4 rank
#1  1  2  3  4    1
#2  4  5  6  7    2
#3  1  2  3  4    1

数据

df <- structure(list(X1 = c(1L, 4L, 1L), X2 = c(2L, 5L, 2L), X3 = c(3L, 
6L, 3L), X4 = c(4L, 7L, 4L)), class = "data.frame", row.names = c(NA, -3L))

我们可以使用cur_group_id中的dplyr

library(dplyr)
df %>% 
    group_by(across(everything())) %>% 
    mutate(rank = cur_group_id()) %>% 
    ungroup
# A tibble: 3 x 5
#     X1    X2    X3    X4  rank
#  <int> <int> <int> <int> <int>
#1     1     2     3     4     1
#2     4     5     6     7     2
#3     1     2     3     4     1

数据

df <- structure(list(X1 = c(1L, 4L, 1L), X2 = c(2L, 5L, 2L), X3 = c(3L, 
6L, 3L), X4 = c(4L, 7L, 4L)), class = "data.frame", row.names = c(NA, -3L))

我猜您的意思是通过对sum等列apply一些汇总度量来对 dataframe 进行整体排名。 该度量可以rank

set.seed(123)
df <- data.frame(
  c1 = runif(10),
  c2 = sample(100:1000, 10),
  c3 = rnorm(10),
  c4 = sample(1:10, 10)
)

df$rank <- rank(-apply(df, 1, sum))

结果:

df
          c1  c2         c3 c4 rank
1  0.2875775 962  1.2240818  2    1
2  0.7883051 508  0.3598138  4    6
3  0.4089769 709  0.4007715  9    4
4  0.8830174 614  0.1106827  3    5
5  0.9404673 192 -0.5558411  1    9
6  0.0455565 906  1.7869131  6    3
7  0.5281055 320  0.4978505  5    8
8  0.8924190 137 -1.9666172 10   10
9  0.5514350 392  0.7013559  8    7
10 0.4566147 951 -0.4727914  7    2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM