Как добавить средний столбец на основе идентификатора пользователя и идентификатора сеанса в R? - PullRequest
1 голос
/ 25 мая 2020

Я хотел бы задать вопрос по кодированию.

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

enter image description here

dataset <- structure(list(ID = 1:8, USERID = c(500L, 520L, 500L, 530L, 530L, 
    520L, 520L, 520L), SALES = c(1000L, 1450L, 1390L, 1778L, 1966L, 
    1100L, 700L, 900L), Mean = c(1000, 1450, 1195, 1778, 1872, 1275, 
    1083.33, 1037.5)), row.names = c(NA, 8L), class = "data.frame")

Моя цель - создать столбец для среднего значения для каждого сеанса на основе спецификаций c пользовательских сессий.

Спасибо,

Ответы [ 3 ]

3 голосов
/ 25 мая 2020

Это легко сделать с помощью group_by из dplyr вместе с cumsum:

library(dplyr)
dataset %>% 
  group_by(USERID) %>%
  mutate(Mean = cumsum(SALES)/(1:n()))
# A tibble: 8 x 4
# Groups:   USERID [3]
     ID USERID SALES  Mean
  <int>  <int> <int> <dbl>
1     1    500  1000 1000 
2     2    520  1450 1450 
3     3    500  1390 1195 
4     4    530  1778 1778 
5     5    530  1966 1872 
6     6    520  1100 1275 
7     7    520   700 1083.
8     8    520   900 1038.
dataset <- structure(list(ID = 1:8, USERID = c(500L, 520L, 500L, 530L, 530L, 
    520L, 520L, 520L), SALES = c(1000L, 1450L, 1390L, 1778L, 1966L, 
    1100L, 700L, 900L)), row.names = c(NA, 8L), class = "data.frame")
2 голосов
/ 25 мая 2020

Мы также можем использовать data.table методы

library(data.table)
setDT(dataset)[, Mean := cumsum(SALES)/seq_len(.N), USERID]

данные

dataset <- structure(list(ID = 1:8, USERID = c(500L, 520L, 500L, 530L, 530L, 
    520L, 520L, 520L), SALES = c(1000L, 1450L, 1390L, 1778L, 1966L, 
    1100L, 700L, 900L)), row.names = c(NA, 8L), class = "data.frame")
2 голосов
/ 25 мая 2020

Это работает в base-R

dataset$Mean <- sapply(1:nrow(dataset), function(x) mean(dataset$SALES[1:x][dataset$USERID[1:x]==dataset$USERID[x]]))

  ID USERID SALES     Mean
1  1    500  1000 1000.000
2  2    520  1450 1450.000
3  3    500  1390 1195.000
4  4    530  1778 1778.000
5  5    530  1966 1872.000
6  6    520  1100 1275.000
7  7    520   700 1083.333
8  8    520   900 1037.500
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...