Сумма столбца в выдаче таблицы данных - PullRequest
0 голосов
/ 01 июня 2018

У меня есть следующая таблица данных:

structure(list(Date = c("2015-04-01", "2015-04-01", "2015-04-01", "2015-04-01", "2015-04-01", "2015-04-01"), Category = structure(c(4L, 4L, 4L, 5L, 5L, 6L), .Label = c("Bakery ", "Branded goods", "Breakfast ", "Canned/Packaged ", "Cooking essentials ", "Household ", "NO CATEGORY", "Personal care", "Stationary ", "Vehicle accessories"), class = "factor"), Sub_Category = c("carbonated drink ", "carbonated drink ", "carbonated drink ", "Dairy ", "Dairy ", "Stationary "), Product = c("soft drink", "soft drink", "soft drink", "Butter ", "Butter ", "A4 paper"), Brand = c("7 up ", "7 up ", "7 up ", "Amul", "Amul", "NO BRAND"), Day = c(1L, 1L, 1L, 1L, 1L, 1L), Month = c(4L, 4L, 4L, 4L, 4L, 4L), Year = c(2015L, 2015L, 2015L, 2015L, 2015L, 2015L), MRP = c("55", "25", "70", "37", "37", "0.5"), Quantity = c(1, 1, 1, 1, 1, 20), Sales = c(55, 25, 70, 37, 37, 10), Wday = c("Wednesday", "Wednesday", "Wednesday", "Wednesday", "Wednesday", "Wednesday"), Week = c(13L, 13L, 13L, 13L, 13L, 13L), X = c(NA, NA, NA, NA, NA, NA), X. = c(NA, NA, NA, NA, NA, NA)), .Names = c("Date", "Category", "Sub_Category", "Product", "Brand", "Day", "Month", "Year", "MRP", "Quantity", "Sales", "Wday", "Week", "X", "X."), sorted = "Date", class = c("data.table", "data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x00000000001b0788>)

, и я хочу показать сумму (количество) или сумму (продажи) для каждого типа категории для каждого дня охватавесь столбец даты.

Я пробовал:

data2 <- data %>% group_by(data$Date) %>% summarise_each(funs(sum))

, но я получаю:

Ошибка в is_list (x): объект 'rlang_is_list' не найден

Также пробовал:

aggregate(cbind(data$Category,data$Sales,data$Quantity)~data$Date,
               data=data,FUN=sum)

это производит совершенно другой вывод.; /

Есть ли способ сделать это?

Даже после удаления пакетов rlang, dplyr и ggplot2 ошибка все равно остается.Есть ли способ обойти это?

Ожидаемый результат выглядит примерно так: enter image description here

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

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Это гораздо более простой способ, используя data.table и reshape2 на предоставленных вами данных

library(reshape2)
library(data.table)
setDT(data)
data2<-dcast(data[,.(Quantity=sum(Quantity),Sales=sum(Sales)),by=.(Category,Date)],Date~Category,value.var = c("Quantity","Sales"),fun.aggregate = sum)

У вас есть продажи и количество

0 голосов
/ 01 июня 2018

Вы можете использовать summarise_at только для Sales & Quantity

# calculate total sales
library(dplyr)
data2 <- data %>% 
  group_by(Date, Category) %>% 
  summarise_at(vars(Sales, Quantity), sum, na.rm = TRUE) %>% 
  mutate(Total = Sales * Quantity)
data2

#> # A tibble: 10 x 5
#> # Groups:   Date [1]
#>    Date       Category              Sales Quantity Total
#>    <chr>      <fct>                 <dbl>    <dbl> <dbl>
#>  1 2015-04-01 "Bakery "                 0        0     0
#>  2 2015-04-01 Branded goods             0        0     0
#>  3 2015-04-01 "Breakfast "              0        0     0
#>  4 2015-04-01 "Canned/Packaged "      150        3   450
#>  5 2015-04-01 "Cooking essentials "    74        2   148
#>  6 2015-04-01 "Household "             10       20   200
#>  7 2015-04-01 NO CATEGORY               0        0     0
#>  8 2015-04-01 Personal care             0        0     0
#>  9 2015-04-01 "Stationary "             0        0     0
#> 10 2015-04-01 Vehicle accessories       0        0    NA

. Затем преобразовать из длинной таблицы в широкую, используя tidyr::spread

library(tidyr)
data2_long <- data2 %>% 
  select(-Quantity, -Sales) %>% 
  spread(Category, Total)
data2_long

# A tibble: 1 x 11
# Groups:   Date [1]
  Date       `Bakery ` `Branded goods` `Breakfast ` `Canned/Packaged ` `Cooking essentials ` `Household ` `NO CATEGORY`
  <chr>          <dbl>           <dbl>        <dbl>              <dbl>                 <dbl>        <dbl>         <dbl>
1 2015-04-01         0               0            0                450                   148          200             0
# ... with 3 more variables: `Personal care` <dbl>, `Stationary ` <dbl>, `Vehicle accessories` <dbl>

Используемые данные:

data <- structure(list(Date = c("2015-04-01", "2015-04-01", "2015-04-01", 
    "2015-04-01", "2015-04-01", "2015-04-01"), Category = structure(c(4L, 
    4L, 4L, 5L, 5L, 6L), .Label = c("Bakery ", "Branded goods", "Breakfast ", 
    "Canned/Packaged ", "Cooking essentials ", "Household ", "NO CATEGORY", 
    "Personal care", "Stationary ", "Vehicle accessories"), class = "factor"), 
    Sub_Category = c("carbonated drink ", "carbonated drink ", 
    "carbonated drink ", "Dairy ", "Dairy ", "Stationary "), 
    Product = c("soft drink", "soft drink", "soft drink", "Butter ", 
    "Butter ", "A4 paper"), Brand = c("7 up ", "7 up ", "7 up ", 
    "Amul", "Amul", "NO BRAND"), Day = c(1L, 1L, 1L, 1L, 1L, 
    1L), Month = c(4L, 4L, 4L, 4L, 4L, 4L), Year = c(2015L, 2015L, 
    2015L, 2015L, 2015L, 2015L), MRP = c("55", "25", "70", "37", 
    "37", "0.5"), Quantity = c(1, 1, 1, 1, 1, 20), Sales = c(55, 
    25, 70, 37, 37, 10), Wday = c("Wednesday", "Wednesday", "Wednesday", 
    "Wednesday", "Wednesday", "Wednesday"), Week = c(13L, 13L, 
    13L, 13L, 13L, 13L), X = c(NA, NA, NA, NA, NA, NA), X. = c(NA, 
    NA, NA, NA, NA, NA)), .Names = c("Date", "Category", "Sub_Category", 
    "Product", "Brand", "Day", "Month", "Year", "MRP", "Quantity", 
    "Sales", "Wday", "Week", "X", "X."), sorted = "Date", 
    class = c("data.frame"), 
    row.names = c(NA, -6L))

PS: решить проблему object 'rlang_is_list' not found.Следуйте решению в этом ответе

Попробуйте запустить R из сеанса терминала / консоли

R --vanilla

Затем удалите и переустановитеrlang с чем-то вроде:

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