【问题标题】:Discretizing variable and providing limits离散变量并提供限制
【发布时间】:2020-12-24 18:49:41
【问题描述】:

基本的cut 函数和dplyr cut_* 函数都离散化连续变量。但这些都不能指定包含在离散区间中的上限/下限。

例如,在下面的例子中使用cut_number

library(tidyverse)
set.seed(901)
df = tibble(x =runif(min = 0.1, max = 0.9, n = 5)) %>% 
    arrange(x)

df = df %>% 
    mutate(x_binned = cut_number(x, n=3))

df
#> # A tibble: 5 x 2
#>       x x_binned     
#>   <dbl> <fct>        
#> 1 0.187 [0.187,0.529]
#> 2 0.524 [0.187,0.529]
#> 3 0.540 (0.529,0.671]
#> 4 0.737 (0.671,0.768]
#> 5 0.768 (0.671,0.768]

reprex package (v0.3.0) 于 2020 年 12 月 24 日创建

底部区间为[0.187, 0.529],顶部区间为[0.671, 0.768]。但我需要包含 0 和 1 的间隔,或者是 [0, 0.529][0.671, 1.0]。在离散连续变量时,是否有一种简单的方法来指定这些界限?

【问题讨论】:

  • 鉴于您的runif 分布的下限为 0.1,在可能的采样值范围以下包含下限 (0) 意味着什么?
  • 您可以使用case_when 或其基本等效项switch 来构建一个支持在向量上定义双端封闭区间的函数。 (我尽量避免嵌套或级联ifelse 解决方案。)

标签: r dplyr tidyverse


【解决方案1】:

您可以通过指定它的长度来创建一个序列,并将其在cut 中用作breaks

n <- 3
seq(0, 1, length.out = n)
#[1] 0.0 0.5 1.0

transform(df, x_binned = cut(x, seq(0, 1, length.out = n)))

#      x x_binned
#1 0.187  (0,0.5]
#2 0.524  (0.5,1]
#3 0.540  (0.5,1]
#4 0.737  (0.5,1]
#5 0.768  (0.5,1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2015-09-26
    • 2019-02-04
    • 1970-01-01
    • 2022-08-06
    • 2020-09-04
    • 2022-01-07
    相关资源
    最近更新 更多