簡體   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