Nano Hash - криптовалюты, майнинг, программирование

изменить после суммирования - dplyr

У меня есть игрушечный фреймворк вроде следующего

      Date Type Units
2016-10-11    A    11
2016-10-12    B    14
2016-10-12    C    10
2016-10-13    A     6
2016-10-13    B     4
2016-10-13    D     9
2016-10-14    E     7
2016-10-14    A    12
2016-10-14    C    12
2016-10-15    A    13
2016-10-15    F    12
2016-10-15    C     3
2016-10-15    D     4

df <- structure(list(Date = c("2016-10-11", "2016-10-12", "2016-10-12", 
"2016-10-13", "2016-10-13", "2016-10-13", "2016-10-14", "2016-10-14", 
"2016-10-14", "2016-10-15", "2016-10-15", "2016-10-15", "2016-10-15"
), Type = c("A", "B", "C", "A", "B", "D", "E", "A", "C", "A", 
"F", "C", "D"), Units = c(11L, 14L, 10L, 6L, 4L, 9L, 7L, 12L, 
12L, 13L, 12L, 3L, 4L)), class = "data.frame", row.names = c(NA, 
-13L))

и я хотел бы: добавить столбец, который указывает количество типов в каждом Date, И суммировать группировку столбцов Units по Date. Выходной набор данных будет примерно таким:

Date       Units n_types
<chr>      <int>   <dbl>
2016-10-11    11       1
2016-10-12    24       2
2016-10-13    19       3
2016-10-14    31       3
2016-10-15    32       4

Однако мне не удалось это сделать, если бы не две mutate функции, как в приведенном ниже коде:

df %>%
  group_by(Date) %>%
  mutate(n_types = n()) %>%
  summarise_if(is.numeric, sum) %>%
  mutate(n_types = sqrt(n_types)) %>%
  ungroup()

Примечание: я использовал summarise_if, потому что в моем исходном наборе данных у меня гораздо больше числовых переменных, чем просто Units, поэтому я должен использовать эту функцию. Есть ли другой способ добавить столбец n_types без использования двух функций mutate? Или мой хороший способ сделать это?

22.01.2019

  • Образцы данных возвращают ожидаемый результат, или я что-то упустил? 22.01.2019
  • Я думаю, у вас есть дополнительные требования в разных столбцах. Если вы уже знаете столбцы для суммирования и sqrt, тогда df %>% group_by(Date) %>% mutate(n_types = n()) %>% summarise(Units = sum(Units), n_types = sqrt(sum(n_types))) 22.01.2019
  • Я знаю, что мой код работает, я спрашивал, есть ли другой способ сделать это без использования двух mutate функций. 22.01.2019

Ответы:


1

Мы можем поместить n_types также в group_by, а затем выполнить summarise_if, чтобы удалить один дополнительный шаг

df %>% 
   group_by(Date) %>% 
   group_by(n_types = n(), add = TRUE) %>% 
   summarise_if(is.numeric, sum)
# A tibble: 5 x 3
# Groups:   Date [?]
#  Date       n_types Units
#  <chr>        <int> <int>
#1 2016-10-11       1    11
#2 2016-10-12       2    24
#3 2016-10-13       3    19
#4 2016-10-14       3    31
#5 2016-10-15       4    32
22.01.2019
  • Например, это один из возможных ответов, которые я искал. Я не знал об аргументе add. Я не стремился заставить свой код работать, потому что мне это удалось, а просто для более чистого пути. Спасибо! 22.01.2019
  • @RicS. Или другой вариант - соединение df %>% group_by(Date) %>% summarise_if(is.numeric, sum) %>% left_join(count(df, Date)) 22.01.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..