Как узнать краткую информацию о расстоянии с помощью конечной точки с выбором - PullRequest
1 голос
/ 11 мая 2019

я пытаюсь получить сводку расстояния с рейсами, заканчивающимися текстом INC

поэтому я присоединился к двум базам данных, чтобы получить имена

flights <- left_join(flights, airlines, by="carrier")

чем я использовал функцию:

> flights %>% select(name, ends_with("Inc.")) %>% summarise(dist=sum(flights$distance))
# A tibble: 1 x 1
       dist
      <dbl>
1 350217607

а также пробовал:

> flights %>% filter(name, ends_with("Inc.")) %>% summarise(dist=sum(flights$distance))
Error: No tidyselect variables were registered
Call `rlang::last_error()` to see a backtrace

Но в первом случае его просто составление сводки по всем авиакомпаниям, а не той, которую я указал, завершается буквой "Inc." второе испытание просто говорит об ошибке и т.д ... что я делаю не так?

Спасибо

Ответы [ 2 ]

1 голос
/ 11 мая 2019

Мы можем использовать tidyvverse методы

library(dplyr)
library(stringr)
flights %>%
     filter(str_detect(name, "Inc\\.$")) %>%
      summarise(dist = sum(distance))

Если мы используем ends_with с оператором select, он проверяет имена столбцов и выбирает соответствующий столбец. Здесь ОП хочет выбрать строки. Таким образом, шаблон должен использоваться с filter на выбранном имени столбца

1 голос
/ 11 мая 2019

Вы можете сделать это несколькими способами, некоторые из них, как показано ниже

library(dplyr)
flights %>% filter(grepl("Inc.$", name)) %>% summarise(dist = sum(distance))

#       dist
#      <dbl>
#1 249500641

flights %>%  summarise(dist = sum(distance[grepl("Inc.$", name)]))

flights %>% slice(grep("Inc.$", name)) %>% summarise(dist = sum(distance))

или с использованием базы R

sum(with(flights, distance[endsWith(name, "Inc.")]))
#[1] 249500641

sum(with(flights, distance[grepl("Inc.$", name)]))

sum(with(flights, distance[grep("Inc.$", name)]))

Также примечание: никогда не используйте $ в трубах чаще, чем это, это может испортить расчет.

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