根据百分比值将值分组为分位数并在 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_percent
与 A_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
我有 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_percent
与 A_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