gpt4 book ai didi

r - 如何在 R 中为每个其他变量创建等级变量?

转载 作者:行者123 更新时间:2023-12-05 05:43:23 24 4
gpt4 key购买 nike

亲爱的社区成员,您好。我正在尝试为 R 中的某些变量创建排名变量。例如,我想转换此数据框

> df 
X1 X2 X3 X4 X5
1 1 4 7 3 2
2 2 5 8 4 3
3 3 6 3 5 4
4 4 1 2 6 5
5 5 2 1 7 6

进入

> df
X1 X2 X3 X4 X5 x1_rank x2_rank x3_rank
1 1 4 7 3 2 3 2 1
2 2 5 8 4 3 3 2 1
3 3 6 3 5 4 3 1 3
4 4 1 2 6 5 1 3 2
5 5 2 1 7 6 1 2 3

像这样(选择 X1~X3,并在它们之间制作排名变量)。

我试过这段代码

for (i in 1:nrow(df)) {
df_rank <- df[i, ] %>%
dplyr::select(X1, X2, X3, X4) %>%
base::rank()
}

我可以想象我可以通过使用 for 循环来解决这个问题,但我是 R 的初学者,所以我不明白为什么这不起作用。

最佳答案

实现它的一种方法是对负值使用 ties 参数。

df <- tibble::tribble(
~x1, ~x2, ~x3, ~x4, ~x5,
1,4,7,3,2,
2,5,8,4,3,
3,6,3,5,4,
4,1,2,6,5,
5,2,1,7,6
)
library(magrittr)
df %>%
cbind(
t(apply(-df[,1:3], 1, rank, ties = "min")) %>% {colnames(.) <- paste0(colnames(.), "_rank"); .}
)

x1 x2 x3 x4 x5 x1_rank x2_rank x3_rank
1 1 4 7 3 2 3 2 1
2 2 5 8 4 3 3 2 1
3 3 6 3 5 4 2 1 2
4 4 1 2 6 5 1 3 2
5 5 2 1 7 6 1 2 3

至于为什么您的代码不起作用 - for 循环不返回任何内容,而是在每次迭代时分配一个变量 df_rank。要修复它,您可以在循环外声明一个对象,并在每次迭代中向其添加内容,最后将其绑定(bind)到原始数​​据。

m <- matrix(ncol = 3, nrow = 5)
for (i in 1:nrow(df)) {
m[i,] <- -df[i, ] %>%
dplyr::select(x1, x2, x3) %>%
base::rank(ties = "min")
}
colnames(m) <- paste0(names(df)[1:3], "_rank")
df %>% bind_cols(m)

关于r - 如何在 R 中为每个其他变量创建等级变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71850854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com