代码之家  ›  专栏  ›  技术社区  ›  max

使用向量时,dplyr::between()的结果与直觉相反

  •  1
  • max  · 技术社区  · 4 年前

    使用时 dplyr::between()

    x <- c(0.2, 0.2, 0.2, 0.5, 0.5, 0.5)
    y <- c(0.0, 0.0, 0.0, 0.1, 0.052, -0.3)
    z <- c(0.43, 0.52, 0.0, 0.76, 0.85, 0.83)
    
    dplyr::between(x=x, left=y, right=z)
    
    # [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE
    

    例如,在第3个元素中,0.2不在0.0和0.0之间,但返回TRUE。

    你知道是什么导致了这种行为吗?

    1 回复  |  直到 4 年前
        1
  •  2
  •   Ronak Shah    4 年前

    dplyr::between 在中仅接受单个值 left right

    你所期望的行为表现在 data.table::between :

    x <- c(0.2, 0.2, 0.2, 0.5, 0.5, 0.5)
    y <- c(0.0, 0.0, 0.0, 0.1, 0.052, -0.3)
    z <- c(0.43, 0.52, 0.0, 0.76, 0.85, 0.83)
    data.table::between(x=x, lower=y, upper=z)
    #[1]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
    
        2
  •  1
  •   akrun    4 年前

    在里面 base R ,使用比较运算符更容易,而且更灵活

    x >= y & x <= z
    #[1]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
    

    x <- c(0.2, 0.2, 0.2, 0.5, 0.5, 0.5)
    y <- c(0.0, 0.0, 0.0, 0.1, 0.052, -0.3)
    z <- c(0.43, 0.52, 0.0, 0.76, 0.85, 0.83)