Фильтровать наблюдения, начиная с числа в интервале? - PullRequest
0 голосов
/ 29 января 2020

Как выбрать наблюдения, начинающиеся с числа в интервале (410 * -420 *)

Kode Operation                                
   <dbl> <chr>                                    
 1    10                        
 2 40020    
 3 41040                
 4 41150               
 5 41260        
 6 42080 
 7 43000               

Результат должен быть следующим:

 Kode Operation   


   <dbl> <chr>                                    

 3 41040                
 4 41150               
 5 41260        
 6 42080 

Надеюсь, что это не так дубликат. Заранее спасибо :)!

Ответы [ 5 ]

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

Простая математика может помочь здесь, независимо от того, сколько у вас чисел ди git (не только 5)

i1 <- x / 10 ^ ((nchar(x) - 3))
x[i1 >= 410 & i1 < 421]
#[1] 41040 41150 41260 42080

ДАННЫЕ

x <- c(10, 40020, 41040, 41150, 41260, 42080, 43000)
0 голосов
/ 29 января 2020

, если вы хотите решение, которое не зависит от общего количества цифр и легко отслеживается, вы также можете выполнить поиск первых 3 цифр напрямую

library(stringr)
library(dplyr)
x<- as_tibble(c(10, 40020, 41040, 41150, 41260, 42080, 43000))
x %>% mutate(first_three_numbers=(as.numeric(substr(value,1,3)))) %>%  
      filter(between(first_three_numbers,410,420))    
0 голосов
/ 29 января 2020

Предполагая, что 410: 420 имеют пять цифр, вы можете использовать floor после деления на 100.

dat[floor(dat$Operation / 100) %in% 410:420, ]
#   Kode Operation
# 3    3     41040
# 4    4     41150
# 5    5     41260
# 6    6     42080

Данные:

dat <- structure(list(Kode = 1:7, Operation = c(10L, 40020L, 41040L, 
41150L, 41260L, 42080L, 43000L)), row.names = c(NA, -7L), class = "data.frame")
0 голосов
/ 29 января 2020

Tidy-версия:

library(tidyverse)
df%>%
mutate(Operation=as.double(Operation))%>%
filter(Operation %in% c(41000:42999))


# A tibble: 4 x 2
    Kode Operation
   <int>     <dbl>
1     3     41040
2     4     41150
3     5     41260
4     6     42080
0 голосов
/ 29 января 2020

Вот базовое решение R

subset(df,Operation%/%100>=410 & Operation%/%100<=420)

такое, что

> dfout
  Kode Operation
3    3     41040
4    4     41150
5    5     41260
6    6     42080

ДАННЫЕ

df <- structure(list(Kode = 1:7, Operation = c(10L, 40020L, 41040L, 
41150L, 41260L, 42080L, 43000L)), class = "data.frame", row.names = c(NA, 
-7L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...