Использование библиотеки r dplyr для генерации агрегированных чисел в новом столбце - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь использовать dplyr для создания нового столбца в фрейме данных на основе агрегирования значений в существующих столбцах.Учитывая мой фрейм данных:

group1 <- c("2019","2019","2019","2018","2018","2017","2017","2017")
group2 <- c("2019-01-01", "2019-01-01","2019-01-01","2018-05-01","2018-06-01","2017-01-01","2017-01-01","2017-02-01")
group3 <- c("A","A","B","A","A","C","C","B")
df <- data.frame("Year" = group1,"Date" = group2,"Sample" = group3)

Дает:

  Year      Date  Sample
1 2019 2019-01-01   A
2 2019 2019-01-01   A
3 2019 2019-01-01   B
4 2018 2018-05-01   A
5 2018 2018-06-01   A
6 2017 2017-01-01   C
7 2017 2017-01-01   C
8 2017 2017-02-01   B

Поэтому я хотел бы сгенерировать новый столбец «Счет», который для каждой строки дает общее количество уникальных дат для выборки.,Таким образом, для приведенных выше данных, я ожидаю, что результаты будут:

  Year       Date Sample Count
1 2019 2019-01-01   A     1
2 2019 2019-01-01   A     1
3 2019 2019-02-01   B     1
4 2018 2018-05-01   A     2
5 2018 2018-06-01   C     2
6 2017 2017-01-01   C     1
7 2017 2017-01-01   C     1
8 2017 2017-02-01   B     1

Я пытался использовать следующий код в r:

df %>%
  group_by(Year) %>%
    group_by(Sample) %>%
      group_by(Date) %>%
        mutate(Count = n_distinct(Date))

Но я неполучить правильный ответ!

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете попробовать:

library(dplyr)

df %>% 
  group_by(Year, Sample) %>% 
  mutate(Count = n_distinct(Date))

Если вы хотите передать несколько переменных в group_by, вам нужно собрать их вместе - то, что вы делали, это отмена предыдущих группировок каждым новым оператором.

Более того, если вы хотите посчитать уникальные даты, вы не должны группировать по ним.

Приведенный выше код даст:

# A tibble: 8 x 4
# Groups:   Year, Sample [6]
  Year  Date       Sample Count
  <fct> <fct>      <fct>  <int>
1 2019  2019-01-01 A          1
2 2019  2019-01-01 A          1
3 2019  2019-01-01 B          1
4 2018  2018-05-01 A          2
5 2018  2018-06-01 A          2
6 2018  2017-01-01 C          1
7 2017  2017-01-01 C          1
8 2017  2017-02-01 B          1

Обратите внимание, что тамнесоответствие между созданным вами фреймом данных и тем, который вы нам показываете.Фрейм данных, сгенерированный вашим кодом:

  Year       Date Sample
1 2019 2019-01-01      A
2 2019 2019-01-01      A
3 2019 2019-01-01      B
4 2018 2018-05-01      A
5 2018 2018-06-01      A
6 2018 2017-01-01      C
7 2017 2017-01-01      C
8 2017 2017-02-01      B

Где действительно единственный Sample с 2 различными Date с в данном Year равен A (в 2018 году).

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