R:创建直方图箱来表示数据中的差距
R: Creating histogram bins to represent gaps in data
有没有一种方法可以使用“case_when”创建代表一系列数据中“人为”差距的分箱?我写的脚本有点用,但我无法用它来绘制我指定的数据间隙。我的尝试被忽略了:
我的数据:
> table(df$den)
0 0.333333333333333 0.666666666666667 1 1.33333333333333
507 155 77 43 18
1.66666666666667 2 2.33333333333333 3 3.33333333333333
7 5 8 3 1
4 4.33333333333333 5.66666666666667 8.33333333333333
1 1 2 1
生成 bin:
df = df %>% mutate(
bins = case_when(
den == 0 ~ "0",
den <= 1 ~ "0 - 1",
den <= 2 ~ "1 - 2",
den <= 3 ~ "2 - 3",
den <= 4 ~ "3 - 4",
den <= 5 ~ "4 - 5",
den <= 6 ~ "5 - 6",
den <= 8 ~ "...",
TRUE ~ "8.0+"
)
)
但是差距被忽略了:
> bins <- as.data.frame(table(df$bins))
> bins
Var1 Freq
1 0 507
2 0 - 1 275
3 1 - 2 30
4 2 - 3 11
5 3 - 4 2
6 4 - 5 1
7 5 - 6 2
8 8.0+ 1
我曾希望实现这样的目标,但“case_when”函数不会创建它:
>bins
Var1 Freq
1 0 507
2 0 - 1 275
3 1 - 2 30
4 2 - 3 11
5 3 - 4 2
6 4 - 5 1
7 5 - 6 2
8 "..." NA
9 8.0+ 1
其他方法也不起作用,而且创建起来很痛苦:
df$bins <- cut(df$den, c(0, seq(0.001, 9, 1)), right = FALSE,
labels=c("0", "0.001 - 1.001", "1.002 - 2.001", "2.002 - 3.001",
"3.002 - 4.001", "4.002 - 5.001", "5.002 - 6.001",
"...", "8.0+"))
ggplot:
ggplot(bins, aes(x = Var1, y = Freq, fill = Var1)) +
geom_bar(stat = "identity", colour="black") +
geom_text(aes(label = Freq), vjust = -0.5) +
scale_fill_brewer(breaks = c("0", "0-1","1-2", "2-3","3-4", "4-5", "5-6", "...", "8+"))
这有帮助吗?我假设 freq
是每个 bin 大小中的数字计数。
library(tidyverse)
df <- tibble(den = c(
0, 0.333333333333333, 0.666666666666667, 1,
1.33333333333333, 507, 155, 77,
43, 18, 1.66666666666667, 2, 2.33333333333333,
3, 3.33333333333333, 7, 5, 8, 3, 1, 4, 3333,
5.66666666666667, 8.33333333333333, 1, 1, 2, 1
))
df |>
mutate(bin = cut(den, breaks = c(0:8, Inf), right = FALSE)) |>
count(bin, name = "freq") |>
add_row(bin = "...", freq = NA_integer_) |>
mutate(bin = fct_relevel(bin, "...", after = 7)) |>
ggplot(aes(bin, freq, fill = bin)) +
geom_bar(stat = "identity", colour = "black") +
geom_text(aes(label = freq), vjust = -0.5) +
scale_fill_brewer()
#> Warning: Removed 1 rows containing missing values (position_stack).
#> Warning: Removed 1 rows containing missing values (geom_text).
由 reprex package (v2.0.1)
于 2022-05-24 创建
有没有一种方法可以使用“case_when”创建代表一系列数据中“人为”差距的分箱?我写的脚本有点用,但我无法用它来绘制我指定的数据间隙。我的尝试被忽略了:
我的数据:
> table(df$den)
0 0.333333333333333 0.666666666666667 1 1.33333333333333
507 155 77 43 18
1.66666666666667 2 2.33333333333333 3 3.33333333333333
7 5 8 3 1
4 4.33333333333333 5.66666666666667 8.33333333333333
1 1 2 1
生成 bin:
df = df %>% mutate(
bins = case_when(
den == 0 ~ "0",
den <= 1 ~ "0 - 1",
den <= 2 ~ "1 - 2",
den <= 3 ~ "2 - 3",
den <= 4 ~ "3 - 4",
den <= 5 ~ "4 - 5",
den <= 6 ~ "5 - 6",
den <= 8 ~ "...",
TRUE ~ "8.0+"
)
)
但是差距被忽略了:
> bins <- as.data.frame(table(df$bins))
> bins
Var1 Freq
1 0 507
2 0 - 1 275
3 1 - 2 30
4 2 - 3 11
5 3 - 4 2
6 4 - 5 1
7 5 - 6 2
8 8.0+ 1
我曾希望实现这样的目标,但“case_when”函数不会创建它:
>bins
Var1 Freq
1 0 507
2 0 - 1 275
3 1 - 2 30
4 2 - 3 11
5 3 - 4 2
6 4 - 5 1
7 5 - 6 2
8 "..." NA
9 8.0+ 1
其他方法也不起作用,而且创建起来很痛苦:
df$bins <- cut(df$den, c(0, seq(0.001, 9, 1)), right = FALSE,
labels=c("0", "0.001 - 1.001", "1.002 - 2.001", "2.002 - 3.001",
"3.002 - 4.001", "4.002 - 5.001", "5.002 - 6.001",
"...", "8.0+"))
ggplot:
ggplot(bins, aes(x = Var1, y = Freq, fill = Var1)) +
geom_bar(stat = "identity", colour="black") +
geom_text(aes(label = Freq), vjust = -0.5) +
scale_fill_brewer(breaks = c("0", "0-1","1-2", "2-3","3-4", "4-5", "5-6", "...", "8+"))
这有帮助吗?我假设 freq
是每个 bin 大小中的数字计数。
library(tidyverse)
df <- tibble(den = c(
0, 0.333333333333333, 0.666666666666667, 1,
1.33333333333333, 507, 155, 77,
43, 18, 1.66666666666667, 2, 2.33333333333333,
3, 3.33333333333333, 7, 5, 8, 3, 1, 4, 3333,
5.66666666666667, 8.33333333333333, 1, 1, 2, 1
))
df |>
mutate(bin = cut(den, breaks = c(0:8, Inf), right = FALSE)) |>
count(bin, name = "freq") |>
add_row(bin = "...", freq = NA_integer_) |>
mutate(bin = fct_relevel(bin, "...", after = 7)) |>
ggplot(aes(bin, freq, fill = bin)) +
geom_bar(stat = "identity", colour = "black") +
geom_text(aes(label = freq), vjust = -0.5) +
scale_fill_brewer()
#> Warning: Removed 1 rows containing missing values (position_stack).
#> Warning: Removed 1 rows containing missing values (geom_text).
由 reprex package (v2.0.1)
于 2022-05-24 创建