簡體   English   中英

根據另一個變量重新排列一個變量

[英]rearrange a variable based on another variable

數據:

set.seed(25)
df<- data.frame(rank=round(rnorm(10)),category=round(runif(10)),v=round(rnorm(10)))

   rank category  v
1     0        0  1
2    -1        0 -1
3    -1        0  1
4     0        0  2
5    -2        0 -1
6     0        0  1
7     2        0  0
8     1        1  0
9     0        1  2
10    0        0 -2

我希望變量“ v”在每個類別中的排名與變量“ rank1”相同。 我的問題是如何創建所需的變量“ v1”?

所需的輸出:

df <- transform(df, rank1 = ave(v, category, FUN = function(x) rank(x, ties.method = "random")))

   rank category  v rank1  v1
1     0        0  1     6 -1
2    -1        0 -1     3  1
3    -1        0  1     7 -1
4     0        0  2     8 -2
5    -2        0 -1     2  1
6     0        0  1     5  0
7     2        0  0     4  1
8     1        1  0     1  2
9     0        1  2     2  0
10    0        0 -2     1  2

所以我得到了預期的結果:

set.seed(25)
df <- data.frame(rank=round(rnorm(10)), category=round(runif(10)), v=round(rnorm(10)))
df <- transform(df, rank1 = ave(v, category, FUN = function(x) rank(x, ties.method = "random")))

df$v1 <- NA

for (i in unique(df$category)) {
  df$v1[df$category==i] <- sort(df$v[df$category==i], decrea=TRUE)[df$rank1[df$category==i]]
}

這個想法正在遍歷所有類別,並將rank1給定的順序應用於向量v排序部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM