Удалить дубликаты, а затем подсчитать общее количество оставшихся - PullRequest
1 голос
/ 24 марта 2020

В кадре данных Planes есть много дубликатов, если мы посмотрим на столбцы manufactor и model Я написал этот код, чтобы увидеть, сколько у нас есть дубликатов

library(tidyverse)
library(nycflights13)

dupl<- planes %>% 
  group_by(manufacturer, model) %>% 
  summarise(duplicates=n())

Если один подсчитать все самолеты для каждого производителя, у какого-то производителя будет много самолетов, потому что у них есть дубликаты. Я хочу удалить дубликаты, чтобы у каждого производителя была только 1 каждая модель, и подсчитать все плоскости для каждого производителя (после удаления дубликатов)

Здесь я застрял. Итак, в основном, я хочу выяснить, сколько у многих фактур имеется более 50 плоскостей, как только мы очистим дубликаты

Я попытался сделать так, чтобы у каждого производителя была только 1 плоскость каждой модели, как эта (не уверен, что это правильный путь к go хотя)

duplRemove<- dupl%>% 
   group_by(manufacturer, model, duplicates) %>% 
   mutate(RemovDupl = duplicates-duplicates+1)

Теперь, как я могу посчитать RemoveDupl для каждого производителя? Так, например, AIRBUS должен показать 14 самолетов (из того, что я могу посчитать своими глазами)

Ответы [ 3 ]

3 голосов
/ 24 марта 2020

Вы можете удвоить счет, сначала по производителю и модели, затем по производителю:

library(dplyr)

planes %>% 
  count(manufacturer, model) %>%
  count(manufacturer)

# A tibble: 35 x 2
   manufacturer               n
   <chr>                  <int>
 1 AGUSTA SPA                 1
 2 AIRBUS                    14
 3 AIRBUS INDUSTRIE          13
 4 AMERICAN AIRCRAFT INC      1
 5 AVIAT AIRCRAFT INC         1
 6 AVIONS MARCEL DASSAULT     1
 7 BARKER JACK L              1
 8 BEECH                      2
 9 BELL                       2
10 BOEING                    65
# ... with 25 more rows
1 голос
/ 24 марта 2020

В base R мы можем сделать

rowSums(table(planes[c('manufacturer', 'model')])>0)
1 голос
/ 24 марта 2020

Чтобы удалить дубликаты в каждой группе, можно выбрать только одну строку в каждой группе. Например, здесь мы выбираем 1-ую строку в группе.

library(dplyr)
library(nycflights13)

planes %>%  group_by(manufacturer, model) %>% slice(1L)

Итак, если мы подсчитаем manufacturer после выбора 1-й строки в каждой группе, мы получим.

planes %>% 
  group_by(manufacturer, model) %>% 
  slice(1L) %>%
  ungroup() %>%
  count(manufacturer)

# A tibble: 35 x 2
#   manufacturer               n
#   <chr>                  <int>
# 1 AGUSTA SPA                 1
# 2 AIRBUS                    14
# 3 AIRBUS INDUSTRIE          13
# 4 AMERICAN AIRCRAFT INC      1
# 5 AVIAT AIRCRAFT INC         1
# 6 AVIONS MARCEL DASSAULT     1
# 7 BARKER JACK L              1
# 8 BEECH                      2
# 9 BELL                       2
#10 BOEING                    65
# … with 25 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...