我有一个包含大数值变量的数据集。我想创建一个新的字符变量,它根据数字间隔为每个观察值分配一个分类值。
例如,如果数值变量在 0 到 5 之间,则类别将为“B1”,如果数值变量在 5 到 10 之间,则类别将为“B2”。
有一个很好的答案可以解决这个问题 根据数值变量的级别编码新因子
但是我已经有了一张包含因子水平和每个因子水平的数字区间的表格。有没有办法做同样的事情,但直接应用表格而不是写条件?
根据间隔表的组织方式,您还可以将其连接到主数据集。这是一个基于
cars
数据集的或多或少通用的示例,我们将使用重叠的 dplyr::left_join()
,join_by(between(cyl, lower, upper, bounds = "[)"))
:
library(dplyr, warn.conflicts = FALSE)
(mtcars_ <- mtcars[10:20, "cyl", drop = FALSE] |> as_tibble(rownames = "car"))
#> # A tibble: 11 × 2
#> car cyl
#> <chr> <dbl>
#> 1 Merc 280 6
#> 2 Merc 280C 6
#> 3 Merc 450SE 8
#> 4 Merc 450SL 8
#> 5 Merc 450SLC 8
#> 6 Cadillac Fleetwood 8
#> 7 Lincoln Continental 8
#> 8 Chrysler Imperial 8
#> 9 Fiat 128 4
#> 10 Honda Civic 4
#> 11 Toyota Corolla 4
labels <- tibble(lower = c(0,5),
upper = c(5,10),
label = c("B1", "B2"))
left_join(mtcars_, labels, by = join_by(between(cyl, lower, upper, bounds = "[)")))
#> # A tibble: 11 × 5
#> car cyl lower upper label
#> <chr> <dbl> <dbl> <dbl> <chr>
#> 1 Merc 280 6 5 10 B2
#> 2 Merc 280C 6 5 10 B2
#> 3 Merc 450SE 8 5 10 B2
#> 4 Merc 450SL 8 5 10 B2
#> 5 Merc 450SLC 8 5 10 B2
#> 6 Cadillac Fleetwood 8 5 10 B2
#> 7 Lincoln Continental 8 5 10 B2
#> 8 Chrysler Imperial 8 5 10 B2
#> 9 Fiat 128 4 0 5 B1
#> 10 Honda Civic 4 0 5 B1
#> 11 Toyota Corolla 4 0 5 B1
创建于 2024-01-14,使用 reprex v2.0.2