Поиск средств после группировки по дням [дубликат]

avatar
regents
7 апреля 2018 в 23:53
68
2
0

У меня есть набор данных наблюдений по дням за несколько месяцев, и мне нужно найти среднее значение наблюдений за каждый день. Данные взяты из текстового файла с разделителями табуляции со следующими именами столбцов: День, Дата, Просмотры, Взаимодействие, Продажи. Я пытаюсь найти средние просмотры, Engage. и Продажи на все 7 дней недели. В SAS я бы просто использовал proc tabulate с Day в качестве класса и Views, Engagements и Sales в качестве переменных, но я не знаю, как перевести это в код R.

Monday  21JUL03 7206    32  $6.73
Tuesday 22JUL03 9333    51  $4.99
Wednesday   23JUL03 8321    61  $8.87
Thursday    24JUL03 8378    35  $3.69
Friday  25JUL03 12202   45  $4.34
Saturday    26JUL03 6161    34  $3.12
Sunday  27JUL03 9115    29  $2.77
Monday  28JUL03 17112   51  $10.36
Tuesday 29JUL03 12690   51  $10.24
Wednesday   30JUL03 10822   30  $3.96
Thursday    31JUL03 10395   41  $5.45
Friday  01AUG03 6979    31  $2.95
Saturday    02AUG03 3810    19  $1.78
Sunday  03AUG03 4554    30  $5.71
Источник
Ben Bolker
7 апреля 2018 в 23:55
2

взгляните на ?aggregate ...

Elio Diaz
8 апреля 2018 в 00:03
0

сначала проанализируйте дату, затем сгруппируйте и, наконец, суммируйте: библиотека (dplyr) библиотека (в любое время) данные %>% mutate (день = любое время (день)) %> % group_by (день) %> % summ (total_sales = среднее (продажи) ))

G. Grothendieck
8 апреля 2018 в 00:14
0

DF <- transform(DF, Date = as.Date(Date, "%d%b%y"), Sales = as.numeric(sub("$", "", Sales, fixed = TRUE))); aggregate(cbind(Views, Engagement, Sales) ~ Day, DF, mean)

Ответы (2)

avatar
MKR
8 апреля 2018 в 07:45
1

OP хочет вычислить mean для 3 столбцов своего data.frame. Следовательно, dplyr::summarise_at должен быть хорошим вариантом.

Решение представляет собой двухэтапный процесс:

  1. Чтение из tab отдельного файла
  2. Обработка данных с помощью dplyr

Решение:

# Read from file. "sales.txt" has been created using OP's data.
df <- read.delim("sales.txt", header = FALSE, stringsAsFactors = FALSE)
names(df) <- c("Day", "Date", "Views", "Engagement", "Sales")

library(dplyr)

df %>% mutate(Sales = as.numeric(sub("\\$","", Sales))) %>%
  group_by(Day) %>%
  summarise_at(vars(c("Views", "Engagement", "Sales")),funs(Mean = mean))


# Result
# # A tibble: 7 x 4
#   Day       Views_Mean Engagement_Mean Sales_Mean
#   <chr>          <dbl>           <dbl>      <dbl>
# 1 Friday          9590            38.0       3.64
# 2 Monday         12159            41.5       8.54
# 3 Saturday        4986            26.5       2.45
# 4 Sunday          6834            29.5       4.24
# 5 Thursday        9386            38.0       4.57
# 6 Tuesday        11012            51.0       7.62
# 7 Wednesday       9572            45.5       6.41
avatar
J. Trimarco
8 апреля 2018 в 00:30
0

Может что-то вроде этого?

library(tidyverse)

Date <- seq(lubridate::ymd('2012-07-03'),lubridate::ymd('2012-07-20'),by='days')
Day <- lubridate::wday(Date, label = TRUE)
Views <- sample(c(4000:20000), length(Date))
Engagement <- sample(c(20:50), length(Date))
Sales <- sample.int(300:1000, length(Date))/100

df <- data.frame(Day, Date, Views, Engagement, Sales) %>%
    group_by(Day) %>%
    summarise(mean_engagement = mean(Engagement), 
              mean_views = mean(Views), 
              mean_sales = mean(Sales))

df