[英]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.