Как написать новый набор данных с частотами до строки x в текущем наборе данных? - PullRequest
0 голосов
/ 18 июня 2020

Итак, у меня есть этот набор данных, который выглядит следующим образом:

Day     A   B   C   D
01.01   6   3   4   9
01.02   3   7   3   2
01.03   2   10  9   2
01.04   1   1   5   9
01.05   1   1   1   10
01.06   1   9   5   5
01.07   4   3   7   7
01.08   7   7   9   4
01.09   9   9   8   4
01.10   5   7   3   1

A, B, C и D - магазины, а от 1 до 10 - это предметы, у которых было наибольшее количество продаж в этом день в этом магазине. Так что в магазине А они могли продать любое количество любых предметов, но номер нет. 6 был самым продаваемым товаром в день 1. Пока что моя номинальная таблица частот для всех магазинов выглядела так:

Item    count of item
1           7
2           3
3           5
4           4
5           4
6           1
7           6
8           1
9           7
10          2

Таким образом, в основном за 10 дней товар 1 был самым продаваемым товаром в 7 магазинах. Итак, 5 самых продаваемых товаров через 10 дней выглядят так:


Item    count of item
1           7
9           7
7           6
3           5
4           4

Мне нужно, чтобы эти 5 самых продаваемых товаров были первой строкой в ​​новом наборе данных под названием d1. Вторая строка в d1 должна быть пятеркой лучших в день 11 и т. Д.

#d1
Day   1st  2nd  3rd  4th  5th
01.10  1    9   7    3     4
01.11  9    1   7    3     4

Спасибо!

1 Ответ

0 голосов
/ 18 июня 2020

Это лучший способ предоставить данные. Введите dput(), чтобы поместить его в эту форму.

Days <- structure(list(Day = c(1.01, 1.02, 1.03, 1.04, 1.05, 1.06, 1.07, 
     1.08, 1.09, 1.1), A = c(6L, 3L, 2L, 1L, 1L, 1L, 4L, 7L, 9L, 5L),
     B = c(3L, 7L, 10L, 1L, 1L, 9L, 3L, 7L, 9L, 7L), C = c(4L, 
     3L, 9L, 5L, 1L, 5L, 7L, 9L, 8L, 3L), D = c(9L, 2L, 2L, 9L, 10L, 
     5L, 7L, 4L, 4L, 1L)), class = "data.frame", row.names = c(NA, -10L))

Чтобы получить табуляцию за 10 дней, просто сверните данные с помощью unlist():

FreqTable <- table(unlist(Days[, -1]))   # Tabulate all rows
FreqTable
# 
#  1  2  3  4  5  6  7  8  9 10 
#  7  3  5  4  4  1  6  1  7  2 
Top5.freq <- sort(FreqTable, decreasing=TRUE)[1:5]   # Top 5 products
Top5.prod <- as.numeric(names(Top5.freq))                 # Product names
d1 <- data.frame(Day="1.10", t(Top5.prod))           # Row 1 of d1
colnames(d1)[-1] <- c("1st", "2nd", "3rd", "4th", "5th")
d1
#    Day 1st 2nd 3rd 4th 5th
# 1 1.10   1   9   7   3   4

Вы не предоставили данные для дня 11 или укажите, представляет ли он один день или совокупность дней 1-11.

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