如何在 R 中实现 Stata 的 inrange() 函数的等效功能?

问题描述 投票:0回答:1

这类似于 R 中 Stata 函数 inlist() 的等价物是什么?,除了

inrange()

在 Stata 中,我可以使用

var
选择落在某个
[x,y]
范围内的(数字)变量
inrange(var, x, y)
的观测值。例如:

keep if inrange(var, 50, 100)

R 中的等价物是什么,最好是在 tidyverse 内?

我知道我可以执行以下操作,但是有更快的方法吗?

data %>% filter(var>=50 & var<=100)
r tidyverse stata
1个回答
0
投票

总结一下评论。

between
dplyr
中的
data.table
可能是最接近STATA的
inrange
函数的东西。幸运的是,该函数的语法看起来也非常相似!

library(palmerpenguins)
library(dplyr)

penguins |>
  filter(between(body_mass_g, left = 2000, right = 3000)) |>
  head(n = 5)
#> # A tibble: 5 × 8
#>   species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
#>   <fct>   <fct>           <dbl>         <dbl>             <int>       <int>
#> 1 Adelie  Dream            37            16.9               185        3000
#> 2 Adelie  Dream            37.5          18.9               179        2975
#> 3 Adelie  Biscoe           34.5          18.1               187        2900
#> 4 Adelie  Biscoe           36.5          16.6               181        2850
#> 5 Adelie  Biscoe           36.4          17.1               184        2850
#> # ℹ 2 more variables: sex <fct>, year <int>

## this can generalise to other popular ways to manipulate data in r 

penguins[between(penguins$body_mass_g, left = 2000, right = 3000),] |>
  head(n = 5)
#> # A tibble: 5 × 8
#>   species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
#>   <fct>   <fct>           <dbl>         <dbl>             <int>       <int>
#> 1 <NA>    <NA>             NA            NA                  NA          NA
#> 2 Adelie  Dream            37            16.9               185        3000
#> 3 Adelie  Dream            37.5          18.9               179        2975
#> 4 Adelie  Biscoe           34.5          18.1               187        2900
#> 5 Adelie  Biscoe           36.5          16.6               181        2850
#> # ℹ 2 more variables: sex <fct>, year <int>

data.table
版本略有不同,因为它让您可以选择执行
<
>
语句

library(palmerpenguins)
library(dplyr)

  
penguins |>
  filter(data.table::between(body_mass_g, lower = 2000, upper = 3000, incbounds = FALSE)) |>
  head(n = 5)

#> # A tibble: 5 × 8
#>   species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
#>   <fct>   <fct>           <dbl>         <dbl>             <int>       <int>
#> 1 Adelie  Dream            37.5          18.9               179        2975
#> 2 Adelie  Biscoe           34.5          18.1               187        2900
#> 3 Adelie  Biscoe           36.5          16.6               181        2850
#> 4 Adelie  Biscoe           36.4          17.1               184        2850
#> 5 Adelie  Dream            33.1          16.1               178        2900
#> # ℹ 2 more variables: sex <fct>, year <int>

创建于 2024-09-09,使用 reprex v2.1.1

© www.soinside.com 2019 - 2024. All rights reserved.