Получение ошибки при попытке использовать функцию «фильтр» по нескольким параметрам - PullRequest
1 голос
/ 21 марта 2020
library(tidyverse)
library(nycflights13)

Я хочу выбрать только те рейсы, значения которых указаны в указанных столбцах. Поэтому меня не волнуют рейсы с пустыми значениями в столбцах dep_delay, arr_delay and distance

Я получаю сообщение об ошибке: Error: Result must have length 1, not 3

Эта ошибка вызвана этим: filter(!is.na(c("dep_delay", "arr_delay", "distance")))

flights %>% 
    group_by(dep_delay, arr_delay, distance) %>% 
    filter(!is.na(c("dep_delay", "arr_delay", "distance"))) %>% 
    summarise()

Я также пытался сделать filter(!is.na("dep_delay", "arr_delay", "distance")) (удаление c(...)

1 Ответ

1 голос
/ 21 марта 2020

Если имеется несколько столбцов, используйте filter_at (при условии, что мы удаляем строки, если в каждой строке есть какие-либо NA для каждого из столбцов)

library(dplyr)
flights %>%         
     filter_at(vars(c("dep_delay", "arr_delay", "distance")), 
           all_vars(!is.na(.)))
# A tibble: 327,346 x 19   
#    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin dest 
#   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>     <dbl> <chr>    <int> <chr>   <chr>  <chr>
# 1  2013     1     1      517            515         2      830            819        11 UA        1545 N14228  EWR    IAH  
# 2  2013     1     1      533            529         4      850            830        20 UA        1714 N24211  LGA    IAH  
# 3  2013     1     1      542            540         2      923            850        33 AA        1141 N619AA  JFK    MIA  
# 4  2013     1     1      544            545        -1     1004           1022       -18 B6         725 N804JB  JFK    BQN  
# 5  2013     1     1      554            600        -6      812            837       -25 DL         461 N668DN  LGA    ATL  
# 6  2013     1     1      554            558        -4      740            728        12 UA        1696 N39463  EWR    ORD  
# 7  2013     1     1      555            600        -5      913            854        19 B6         507 N516JB  EWR    FLL  
# 8  2013     1     1      557            600        -3      709            723       -14 EV        5708 N829AS  LGA    IAD  
# 9  2013     1     1      557            600        -3      838            846        -8 B6          79 N593JB  JFK    MCO  
#10  2013     1     1      558            600        -2      753            745         8 AA         301 N3ALAA  LGA    ORD  
# … with 327,336 more rows, and 5 more variables: air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>,
#   time_hour <dttm>

В версии devel, мы можем использовать across с filter

flights %>% 
        filter(across(c(dep_delay, arr_delay, distance), ~ !is.na(.)))

Если условие состоит в том, чтобы среди этих столбцов был хотя бы один не-NA, замените all_vars на any_vars

flights %>%            
          filter_at(vars(c("dep_delay", "arr_delay", "distance")), 
                any_vars(!is.na(.)))

ПРИМЕЧАНИЕ: шаг group_by может быть после шага filter, так как мы используем те же столбцы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...