Как подсчитать частоту факторов и организовать в новом кадре данных в R - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть такой фрейм данных:

test1 = data.frame("id" = c("FC01", "FC01", "FC22", "FC03", "FC01"),
                    "product" = c("p01", "p02", "p03", "p01", "p03"),
                    "year" = c("2018", "2017", "2015", "2018", "2016"))

Мне нужно найти идентификаторы, которые появляются чаще, чем onc, купленные между 2016 и 2018 годами, и знать, какие продукты они купили и в каком году.Можно ли создать новый фрейм данных, который показывает идентификаторы и сколько раз они появляются и когда это произошло?Примерно так:

test2 = data.frame("times" = c(3, 1), "id" = c("FC01", "FC03"),
                   "year" = c("2018, 2017, 2016", "2018"))

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

1 Ответ

0 голосов
/ 23 февраля 2019
test1$year <- as.numeric(as.character(test1$year))

test1 %>% filter(between(year,2016,2018))
      %>% group_by(id)
      %>% summarize(times = n(),
          year = toString(unique(year)))


  id    times year          
  <fct> <int> <chr>         
1 FC01      3 2018 2017 2016
2 FC03      1 2018  

Примечания:

  • Получить столбец times просто, мы просто используем функцию полезности dplyr::n().
  • Для вставленного списка (уникального)строковые имена лет, такой же подход, как этот ответ .toString(...) является более чистым кодом, чем paste0(as.character(...), collapse=' ')
  • Обратите внимание, что мы должны использовать unique(year), поскольку у вас может быть несколько записей для одного года.
  • Чтобы иметь возможность filter(between(year, 2016, 2018)), мысначала необходимо исправить значение year, чтобы оно было числовым, а не фактором (или, как минимум, убедитесь, что уровни факторов также равны 2015..2018, чтобы прямое выполнение as.numeric() работало как задумано, вместо того, чтобы давать 1..4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...