Группировать таблицу по дате, затем суммировать и считать в R - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть простой набор данных ниже

DealDate <- c("1/1/13", "1/2/13", "1/6/13", "1/1/13", "1/2/13", "1/6/13", "1/1/13",
              "1/2/13", "1/6/13")
DealValue<- c("100", "200", "300", "400", "100", "200", "300", "400", "100")
ClientNAME <- c("a", "b", "c", "a", "b", "c", "b", "c", "e")
data<- data.frame(DealDate, DealValue, ClientName)

И в надежде получить результаты ниже:

"Date"       "Unique_Client_Count"    "Deal_Count"    "Total_DealValue"

"2013.01"    "2"                      "3"             "800"

В настоящее время я создаю фрейм данных для каждого, а затем объединяю их вместе. Я пытался использовать "mutate" после "group_by"

result <- data %>% group_by(Date = DealDate) %>%
          summarise(Total_DealValue = sum(DealValue)) %>%
          mutate(Deal_Count = count(DealValue))

и опустился ниже

Error in UseMethod("summarise_"):
  no applicable method for 'summarise_' applied to an object of class
  "c('double', 'numeric')"

Кто-нибудь, пожалуйста, дайте мне знать, если есть более простой способ сделать это?

Заранее спасибо, Тина

Ответы [ 3 ]

1 голос
/ 12 апреля 2020

Спасибо за предоставленный воспроизводимый пример.

Все ваши тестовые данные преобразуются в коэффициенты при объединении во фрейм данных. Часто лучше использовать stringsAsFactors = FALSE в вызове функции data.frame.

В приведенном ниже коде я преобразовал каждую факторную переменную в правильный тип in-line.

Если каждая строка в ваших данных представляет собой уникальную сделку, то n() даст вам количество строк для каждой даты.

library(dplyr)
data %>%
  group_by(Date = DealDate) %>%
  summarise(
    Unique_Client_Count = length(unique(ClientNAME)),
    Deal_Count = n(),
    Total_DealValue = sum(as.numeric(DealValue))
  )
0 голосов
/ 12 апреля 2020

Опция с использованием data.table

library(data.table)
setDT(type.convert(data, as.is = TRUE))[, .(Unique_Client_Count = uniqueN(ClientNAME), Deal_Count = .N, sum = sum(DealValue)), by = DealDate]
0 голосов
/ 12 апреля 2020

Мы можем рассчитать использование n_distinct для подсчета уникального количества клиентов, n() для расчета Deal_Count и sum DealValue для каждой даты.

library(dplyr)

data %>%
  type.convert(as.is = TRUE) %>%
  group_by(DealDate) %>%
  summarise(Unique_Client_Count = n_distinct(ClientNAME), 
            Deal_Count = n(), 
            sum  = sum(DealValue))

#  DealDate Unique_Client_Count Deal_Count   sum
#  <chr>                  <int>      <int> <int>
#1 1/1/13                     2          3   800
#2 1/2/13                     2          3   700
#3 1/6/13                     2          3   600

Если вам нужны цифры только для конкретной даты c, вы можете filter это, filter(DealDate == '1/1/13')

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