Фильтр или подмножество на основе НЕ больше, чем И НЕ меньше, чем в R - PullRequest
0 голосов
/ 31 января 2020

Я хочу установить интервал в нижней части, а также в верхней части диапазона чисел в переменной. Мой вопрос, как я могу подмножество или фильтр на основе не больше, чем и не меньше, чем в R? Я посмотрел реляционные операторы ?'>', и нет ничего похожего на !> или !>=. Затем я обнаружил, что это возможно с !between() из пакета dplyr, но я не могу понять, как отрицать это в базе R. Как бы вы это сделали? Что-то вроде !(x[x >= left & x <= right]) не работает ...

require(dplyr)
#> Loading required package: dplyr
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
require(ggplot2)
#> Loading required package: ggplot2
x <- seq(-5, 5, length.out = 1000)
d <- tibble(X = x, Y = x^3)

### THIS WORKS
(d %>% 
  filter(!between(X, -2, 2)) -> d_sub)
#> # A tibble: 600 x 2
#>        X     Y
#>    <dbl> <dbl>
#>  1 -5    -125 
#>  2 -4.99 -124.
#>  3 -4.98 -124.
#>  4 -4.97 -123.
#>  5 -4.96 -122.
#>  6 -4.95 -121.
#>  7 -4.94 -121.
#>  8 -4.93 -120.
#>  9 -4.92 -119.
#> 10 -4.91 -118.
#> # ... with 590 more rows

### PLOT TO CONFIRM
(d_sub%>% 
  ggplot(aes(X,Y)) + geom_point())

Создано в 2020-01-30 пакетом prex (v0.3.0)

Ответы [ 2 ]

1 голос
/ 31 января 2020

не нужно ничего отрицать. Вы можете сделать (x <= -2) | (x >= 2)

Например

X= -10:10

X[(X <= -2) | (X >= 2)]
#[1] -10  -9  -8  -7  -6  -5  -4  -3  -2   2   3   4   5   6   7   8   9  10

То же самое, что и

X[!(X >-2 & X <2)]
#[1] -10  -9  -8  -7  -6  -5  -4  -3  -2   2   3   4   5   6   7   8   9  10
1 голос
/ 31 января 2020

В base R мы можем использовать subset и указывать только имена столбцов без кавычек

d_sub2 <- subset(d, !(X >=-2 & X <2))
identical(d_sub, d_sub2)
#[1] TRUE

Или с [

d_sub3 <- d[!(d$X >= -2 & d$X < 2),]
...