Я пытаюсь запустить некоторую базовую статистику (и более глубокую позже) во фрейме данных, который имеет категориальные переменные для продаж. Помимо продаж, он отслеживает такие вещи, как район (где находится продавец), день недели, время дня (обед, после работы и т. д.) и многое другое.
Вот небольшое случайное подмножество данных: (Обратите внимание, что это базовое представление - фактический фрейм данных имеет 38 столбцов - я просто удалил большинство неприменимых)
structure(list(dayofweek = structure(c(4L, 7L, 3L, 7L, 3L, 2L,
2L, 7L, 3L, 3L, 2L, 7L, 5L, 5L, 2L, 5L, 1L, 3L, 7L, 3L, 4L, 1L,
3L, 5L, 7L), .Label = c("Friday", "Monday", "Saturday", "Sunday",
"Thursday", "Tuesday", "Wednesday"), class = "factor"), timeofday = structure(c(6L,
4L, 5L, 5L, 2L, 6L, 6L, 5L, 6L, 3L, 6L, 3L, 5L, 4L, 1L, 3L, 5L,
6L, 5L, 4L, 6L, 6L, 3L, 2L, 5L), .Label = c("After Work", "Early AM",
"Evening", "Late AM", "Lunch", "MidAfternoon", "Overnight"), class = "factor"),
area = c(6L, 4L, 4L, 5L, 5L, 1L, 4L, 2L, 3L, 2L, 7L, 3L,
7L, 5L, 7L, 4L, 1L, 4L, 1L, 4L, 5L, 7L, 1L, 3L, 7L), totsales = c(40,
6, 5, 10, 1, 0, 0, 3, 5, 3, 10, 30, 2, 1, 2, 22, 8, 1, 1,
5, 11, 20, 0, 1, 5)), .Names = c("dayofweek", "timeofday",
"area", "totsales"), class = "data.frame", row.names = c(192278L,
140773L, 121051L, 157984L, 154299L, 258034L, 108031L, 43760L,
78005L, 42103L, 95603L, 98431L, 30252L, 165303L, 40713L, 108252L,
304549L, 137041L, 268473L, 124599L, 161253L, 12897L, 240815L,
89439L, 21032L))
Первое, что я делаю, — это пытаюсь получить средние и медианные продажи в каждой области и в каждое время дня. Я хотел бы, чтобы R прошел список каждого и вернул все значения. Я пробовал это:
vallist<-list(a= c("Early AM", "Late AM", "Lunch", "MidAfternoon", "After Work",
"Evening", "Overnight"),
b= c(1,2,3,4,5,6,7))
sapply(vallist[['b']], function(x)
mapply(function(a,b) mean(data$totsales[which(data$timeofday==a & data$area==b)]),
vallist[['a']], vallist[['b']])
)
Но он применяет среднее значение только к каждому сегменту времени дня в области 1, а не к каждому сегменту времени дня в областях 1-7. Итак, мои результаты выглядят так:
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
Early AM 9.192847 9.192847 9.192847 9.192847 9.192847 9.192847 9.192847
Late AM 8.020678 8.020678 8.020678 8.020678 8.020678 8.020678 8.020678
Lunch 10.096277 10.096277 10.096277 10.096277 10.096277 10.096277 10.096277
MidAfternoon 11.503961 11.503961 11.503961 11.503961 11.503961 11.503961 11.503961
After Work 8.206124 8.206124 8.206124 8.206124 8.206124 8.206124 8.206124
Evening 11.457599 11.457599 11.457599 11.457599 11.457599 11.457599 11.457599
Overnight 11.415667 11.415667 11.415667 11.415667 11.415667 11.415667 11.415667
которые являются правильными ответами для области 1, но вы можете видеть, что они являются одинаковыми значениями для каждой области. Как заставить R применить функцию к нескольким спискам и вернуть все комбинации значений?
Следующими шагами будет применение медианы и оценка на районном уровне и в разные дни недели, но я предполагаю, что одна и та же идея применима ко всем различным комбинациям.
aggregate
? Может что-то вродеaggregate(totsales ~ timeofday + area, data, mean)
? - person A5C1D2H2I1M1N2O1R2T1   schedule 03.03.2014vallist[['b']]
наx
в своемmapply
, и тогда вы получите примерно тот же результат, что и я (примерно потому, что вам также нужен na.rm). - person BrodieG   schedule 03.03.2014