根据百分比值将值分组为分位数并在 R 中可视化?

Grouping values into quantiles based on their % value and visualize in R?

我有 2 个字段具有 % 值,该值显示字段 A 中的字符串与字段 B 的对齐方式,使用模糊匹配方法并将该距离值除以字段 A 的长度。

示例:

  R_Number                     A                     B distance len_A len_B  A_percent  B_percent
1      ABC             Microsoft             Microsoft        0     9     9 0.00000000 0.00000000
2      CBD Microsoft Corporation         Microsoft INC       11    21    13 0.52380952 0.84615385
3      DDV        Microsoft Corp        Microsoft corp        1    14    14 0.07142857 0.07142857
4      ABC         Microsoft inc             Microsoft        4    13     9 0.30769231 0.44444444
5      CBD             Microsoft Microsoft Corporation       12     9    21 1.33333333 0.57142857
6      DDV         Microsoft INC        Microsoft Corp        4    13    14 0.30769231 0.28571429

我想做的是根据 A_percent 和 B_percent 中的 % 值将 R_Number 分组为 0.25、0.5、0.75 和 1 的分位数 graph/and-or table.

我想要的输出看起来像这样,其中每个分位数显示落入每个分位数区域的值的百分比:

 R_Number `25%`  `50%` `75%` `100%`
  <chr>    <dbl>  <dbl> <dbl>  <dbl>
1 ABC      0.143 0.286  0.297  0.308
2 CBD      0.706 0.889  1.11   1.33 
3 DDV      0     0.0357 0.130  0.308

任何帮助都会很棒 - 对 R 来说是新手。

这种操作可以用 tidyverse 函数处理。

library(tidyverse)

# dummy data
DF <- tibble(R_value = rep(LETTERS[1:3], each=3),
             A_percent = runif(9))
DF
# A tibble: 9 x 2
#  R_value A_percent
#  <chr>       <dbl>
#1 A           0.965
#2 A           0.926
#3 A           0.835
#4 B           0.361
#5 B           1.00 
#6 B           0.366
#7 C           0.153
#8 C           0.917
#9 C           0.307

所以首先我们要找到 A_percent 的每个值的分位数。我们可以为此使用 cut()。我不确定您要如何将 B_percentA_percent.

一起包括在内
DF %>%
  mutate(A_quantile = cut(A_percent,
                          breaks = c(0,.25,.5,.75,1),
                          labels = c("25%","50%","75%","100%")))

然后我们要计算每个分位数中每个 R_number 的行数。

DF %>%
  mutate(A_quantile = cut(A_percent,
                          breaks = c(0,.25,.5,.75,1),
                          labels = c("25%","50%","75%","100%"))) %>%
  group_by(R_value, A_quantile) %>%
  summarize(n = n())

最后我们可以将它变成一个宽数据框,将分位数作为单独的列。

DF %>%
  mutate(A_quantile = cut(A_percent,
                          breaks = c(0,.25,.5,.75,1),
                          labels = c("25%","50%","75%","100%"))) %>%
  group_by(R_value, A_quantile) %>%
  summarize(n = n()) %>%
  pivot_wider(names_from=A_quantile,
              values_from=n,
              values_fill=0)
# A tibble: 3 x 4
# Groups:   R_value [3]
#  R_value `100%` `50%` `25%`
#  <chr>    <int> <int> <int>
#1 A            3     0     0
#2 B            1     2     0
#3 C            1     1     1