这类似于 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)
总结一下评论。
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