r - 如何将字符串转换为聚合分位数?

标签 r aggregate quantile percentile

我有一个按组嵌套的数据框。我想将变量“x”从其原始值转换为分位数位置(20%、40%、60%、80%、100% 或 1、2、3、4、5)。

这是我正在使用的数据的示例:

df <- data.frame(x=c(1, 5, 21, 24, 43, 47, 56, 59, 68, 69, 11, 15, 25, 27, 48, 49, 51, 55, 61, 67),
                 y=c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B"))

这是我尝试过的:

df$z <- aggregate(df$x, by = list(df$y), FUN = function(x) quantile(x, probs = c(0.2, 0.4, 0.6, 0.8, 1), na.rm = T))

本质上,我想创建一个如下所示的新变量:

df$z <- c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5)

最佳答案

在分组的 data.frame 上,您可以使用 dplyr::ntile():

library(dplyr)

df %>%
  group_by(y) %>%
  mutate(z = ntile(x, 5))

# A tibble: 20 x 3
# Groups:   y [2]
       x y         z
   <dbl> <fct> <int>
 1     1 A         1
 2     5 A         1
 3    21 A         2
 4    24 A         2
 5    43 A         3
 6    47 A         3
 7    56 A         4
 8    59 A         4
 9    68 A         5
10    69 A         5
11    11 B         1
12    15 B         1
13    25 B         2
14    27 B         2
15    48 B         3
16    49 B         3
17    51 B         4
18    55 B         4
19    61 B         5
20    67 B         5

关于r - 如何将字符串转换为聚合分位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59096485/

相关文章:

r - 使用Apply获取数值

R na.大约错误: need at least two non-NA values to interpolate

function - 如何将 Derby 数据库与 Using Join 和 aggregate 函数一起使用?

Python:groupby 和聚合 > 添加到原始 df

python - Pandas - 基于每列的前 x% 值,标记为新数字

r - 如何根据不同的分位数更改 geom_quantile 中的线型?

r - 在 ggplot 中将 y 轴标签设为粗体(x 轴设置为粗体但 y 轴标签不变)

r - R中的匹配函数arg

postgresql - 保留 distinct 内部 string_agg 的顺序

JavaScript:可以通过给定的 z 分数获得百分位吗?计算分位数?