gpt4 book ai didi

r - 根据 dplyr 中的 percent_rank 创建组

转载 作者:行者123 更新时间:2023-12-02 07:25:00 25 4
gpt4 key购买 nike

我正在尝试根据 dplyr 中某些值的百分比排名创建一些组。

下面的代码创建了一个数据框,然后应用一个函数来确定组。缺点是我不能申请为 tbl_postgres 工作,只能为数据帧工作。所以我很好奇是否有其他解决方案。

我曾考虑过使用 ntile 的东西,但我想创建的组有一些任意的截止点。此外,我没有太多运气让它与 dplyr 一起工作(也许纯 sql 可能有效)。

library(dplyr)

n <- 100

df1 <- data.frame(idx = 1:n, x = rnorm(n))

df1 <- df1 %>%
arrange(x) %>%
mutate(pc_x = percent_rank(x))

index <- function(x) {
if (x < 0) {
return(NA)
} else if (x < 0.3) {
return(1)
} else if (x < 0.7) {
return(2)
} else if (x <= 1) {
return(3)
} else {
return(NA)
}
}

df1 <- df1 %>%
mutate(group = sapply(pc_x, index))

最佳答案

也许 cut将满足您的需求:

library(dplyr)
n <- 100
set.seed(42)
df1 <- data.frame(idx = 1:n, x = rnorm(n))
df1 <- df1 %>%
arrange(x) %>%
mutate(pc_x = percent_rank(x))

我使用 -1e9breaks因为cut是“左开”的,所以如果我使用 breaks <- c(0, ...)那么第一行是NA而不是 1。

breaks <- c(-1e9, 0.3, 0.7, 1)
df1 %>%
mutate(grp = cut(pc_x, breaks=breaks, labels=FALSE)) %>%
group_by(grp)
## Source: local data frame [100 x 4]
## Groups: grp [3]
## idx x pc_x grp
## (int) (dbl) (dbl) (int)
## 1 59 -2.9930901 0.00000000 1
## 2 18 -2.6564554 0.01010101 1
## 3 19 -2.4404669 0.02020202 1
## 4 39 -2.4142076 0.03030303 1
## 5 22 -1.7813084 0.04040404 1
## .. ... ... ... ...

关于r - 根据 dplyr 中的 percent_rank 创建组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33573077/

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