Как я могу отфильтровать дублирующиеся строки на группу - PullRequest
0 голосов
/ 05 декабря 2018

Итак, вот данные, с которыми я работаю:

ID    Year    State    Grade    Loss    Total    
1     2016    AZ       A        50      1000
1     2016    AZ       A        50      1000
2     2016    AZ       B        0       5000
3     2017    AZ       A        0       2000
4     2017    AZ       C        10      100
2     2017    AZ       B        0       3000

Я пытаюсь создать таблицу, показывающую сумму потерянного значения, сгруппированную по году, состоянию и классу,Та часть, которую я сделал, но проблема в том, что вы видите, что есть дублированная строка для ID = 1.Мне нужно добавить в мой код компонент, который удаляет все дублирующиеся строки, подобные ему, в моих данных после того, как я сгруппировал данные по году, состоянию и классу.

Причина, по которой я хочу удалить дубликаты после группировки данных, заключается в том, что идентификационный номер может дублироваться для другого года, но это нормально, поскольку это новое наблюдение.Я просто хочу удалить все дубликаты, если год, штат и класс совпадают.В основном, если вся строка является дубликатом, она должна быть удалена.

Я не могу сказать, должен ли я использовать Unique () или Distinct (), но вот что у меня есть:

   Answer <- data %>%
        group_by(Year, State, Grade) %>%
        filter(row_number(ID) == 1) %>% #This is the part to replace
        summarise(x = sum(Loss) / sum(Total)) %>%
        spread(State, x)

Вывод должен выглядеть так:

Year    State    Grade    x
2016    AZ       A        0.05
2016    AZ       B        0
2016    AZ       C        0
2017    AZ       A        0
2017    AZ       B        0
2017    AZ       C        0.1

1 Ответ

0 голосов
/ 05 декабря 2018

Несколько вещей.Ниже я использую distinct для удаления дублирующихся строк.Кроме того, в ваших ожидаемых результатах у вас есть запись для класса C на 2016 год, которого нет в ваших исходных данных.Итак, я использовал complete, чтобы добавить это (и любые другие пропущенные случаи) в качестве нуля.Наконец, как отмечает @akrun выше: откуда взято 0.00833?Опечатка или я неправильно понял расчет?

df <- read.table(text = "ID    Year    State    Grade    Loss    Total    
1     2016    AZ       A        50      1000
1     2016    AZ       A        50      1000
2     2016    AZ       B        0       5000
3     2017    AZ       A        0       2000
4     2017    AZ       C        10      100
2     2017    AZ       B        0       3000", header = TRUE)

Answer <- df %>%  
  distinct %>% 
  group_by(Year, State, Grade) %>%
  summarise(x = sum(Loss) / sum(Total)) %>%
  complete(Year, State, Grade, fill = list(x = 0)) 

# # A tibble: 6 x 4
# # Groups:   Year, State [2]
#    Year State Grade     x
#   <int> <fct> <fct> <dbl>
# 1  2016 AZ    A      0.05
# 2  2016 AZ    B      0   
# 3  2016 AZ    C      0   
# 4  2017 AZ    A      0   
# 5  2017 AZ    B      0   
# 6  2017 AZ    C      0.1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...