【问题标题】:Arrange data frame with multiple columns + rank column用多列+排名列排列数据框
【发布时间】:2020-12-13 06:56:40
【问题描述】:

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

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

例如

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

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

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

【问题讨论】:

  • 从 dplyr 签出 dense_rank
  • 谢谢。但它没有用。 dense_rank 只能采用一个向量进行排名。我想对数据框进行排名
  • 请让那些试图帮助你的人更容易。不要将数据/代码添加为图像。提供可重现的示例以及预期的输出。阅读how to give a reproducible example
  • 很高兴得到帮助!单击左侧的复选标记,随时接受下面的任何一个答案。每个帖子只能接受一个答案。见stackoverflow.com/help/someone-answers。也请对stackoverflow.com/questions/65274978/… 执行相同的操作,以便将其标记为已解决并对其他人有所帮助。

标签: r


【解决方案1】:

您可以逐行粘贴所有值并使用match 创建rank 列。如果您的数据框名为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))

【讨论】:

    【解决方案2】:

    我们可以从dplyr使用cur_group_id

    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))
    

    【讨论】:

      【解决方案3】:

      我猜你的意思是通过apply对列进行一些汇总度量,例如sum,将数据框作为一个整体进行排名。该措施可以是ranked:

      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
      

      【讨论】:

        猜你喜欢
        • 2018-07-11
        • 2019-06-18
        • 1970-01-01
        • 2019-08-31
        • 2020-04-23
        • 1970-01-01
        • 2011-11-12
        相关资源
        最近更新 更多