Расширение фрейма данных с помощью столбца, который не добавляет информации - PullRequest
0 голосов
/ 26 октября 2018

У меня есть данные как ниже:

ex <- structure(list(data = structure(c(16983, 16983, 16983, 16983, 
16983, 16983, 16983, 16983, 16983, 16983, 16983, 16983, 16983, 
16983, 16983, 16983, 16983, 16983, 16983, 16984, 16984, 16984, 
16984, 16984, 16984, 16985, 16985, 16985, 16985, 16985, 16985, 
16986, 16986, 16986, 16986, 16986, 16986, 16987, 16987, 16987, 
16987, 16988, 16988, 16988, 16988, 16988, 16989, 16989, 16989, 
16989), class = "Date"), media = c("Newspapers", "Newspapers", 
"Newspapers", "Newspapers", "Magazines", "Magazines", "Magazines", 
"Outdoor", "Outdoor", "Outdoor", "Outdoor", "Outdoor", "Outdoor", 
"Radio", "Radio", "Radio", "Radio", "Radio", "Radio", "Radio", 
"Radio", "Radio", "Radio", "Radio", "Radio", "Radio", "Radio", 
"Radio", "Radio", "Radio", "Radio", "Newspapers", "Magazines", 
"Radio", "Radio", "Radio", "Radio", "Radio", "Radio", "Radio", 
"Radio", "Radio", "Radio", "Radio", "Radio", "Radio", "Newspapers", 
"Newspapers", "Magazines", "Radio"), brand_short = c("Brand A", 
"Brand B", "Brand C", "Brand D", "Brand E", "Brand C", "Brand D", 
"Brand A", "Brand E", "Brand B", "Brand F", "Brand C", "Brand D", 
"Brand A", "Brand E", "Brand B", "Brand F", "Brand C", "Brand D", 
"Brand A", "Brand E", "Brand B", "Brand F", "Brand C", "Brand D", 
"Brand A", "Brand E", "Brand B", "Brand F", "Brand C", "Brand D", 
"Brand C", "Brand E", "Brand A", "Brand E", "Brand F", "Brand C", 
"Brand A", "Brand E", "Brand F", "Brand C", "Brand A", "Brand E", 
"Brand B", "Brand F", "Brand C", "Brand A", "Brand C", "Brand A", 
"Brand A"), label = c("ntv0_Newspapers_Brand A", "ntv0_Newspapers_Brand B", 
"ntv0_Newspapers_Brand C", "ntv0_Newspapers_Brand D", "ntv0_Magazines_Brand E", 
"ntv0_Magazines_Brand C", "ntv0_Magazines_Brand D", "ntv0_Outdoor_Brand A", 
"ntv0_Outdoor_Brand E", "ntv0_Outdoor_Brand B", "ntv0_Outdoor_Brand F", 
"ntv0_Outdoor_Brand C", "ntv0_Outdoor_Brand D", "ntv0_Radio_Brand A", 
"ntv0_Radio_Brand E", "ntv0_Radio_Brand B", "ntv0_Radio_Brand F", 
"ntv0_Radio_Brand C", "ntv0_Radio_Brand D", "ntv0_Radio_Brand A", 
"ntv0_Radio_Brand E", "ntv0_Radio_Brand B", "ntv0_Radio_Brand F", 
"ntv0_Radio_Brand C", "ntv0_Radio_Brand D", "ntv0_Radio_Brand A", 
"ntv0_Radio_Brand E", "ntv0_Radio_Brand B", "ntv0_Radio_Brand F", 
"ntv0_Radio_Brand C", "ntv0_Radio_Brand D", "ntv0_Newspapers_Brand C", 
"ntv0_Magazines_Brand E", "ntv0_Radio_Brand A", "ntv0_Radio_Brand E", 
"ntv0_Radio_Brand F", "ntv0_Radio_Brand C", "ntv0_Radio_Brand A", 
"ntv0_Radio_Brand E", "ntv0_Radio_Brand F", "ntv0_Radio_Brand C", 
"ntv0_Radio_Brand A", "ntv0_Radio_Brand E", "ntv0_Radio_Brand B", 
"ntv0_Radio_Brand F", "ntv0_Radio_Brand C", "ntv0_Newspapers_Brand A", 
"ntv0_Newspapers_Brand C", "ntv0_Magazines_Brand A", "ntv0_Radio_Brand A"
), var1 = c(2, 3, 2, 1, 6, 1, 2, 0, 0, 0, 0, 0, 0, 451, 6, 468, 
921, 800, 258, 36, 14, 546, 1316, 749, 264, 36, 15, 608, 918, 
1097, 265, 1, 1, 25, 4, 3, 1129, 25, 4, 3, 981, 46, 5, 552, 4, 
989, 1, 1, 1, 65), var2 = c(9240, 41030, 146280, 45000, 792500, 
151900, 115483, 302125, 4034, 555326, 2661, 5806, 48268, 473789, 
60340, 237996, 484655, 415685, 338373, 6185, 39760, 149848, 315474, 
210416, 159881, 5577, 24150, 100646, 174513, 317148, 106100, 
98280, 164450, 3730, 17990, 160, 941389, 3726, 18060, 152, 765857, 
14152, 34790, 354024, 862, 872216, 6240, 16450, 1870, 20458)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -50L))

Я хочу иметь строки для всех комбинаций data, media и brand_short, заполняя var1 и var2 с помощью0 если в данных отсутствовала комбинация.Я также хотел бы сохранить переменную label, которая, как вы можете заметить, создается с использованием media и brand_short.Я знаю, что функция tidyr::complete разработана специально для этого, но у меня проблемы с соответствующим вызовом.Тот, который я пробовал:

ex %>% complete(data, nesting(media, brand_short, label), fill = list(var1 = 0, var2 = 0))

не производит для всех брендов и не создает дополнительных нежелательных ярлыков:

ex %>% complete(data, media, nesting(brand_short, label), fill = list(var1 = 0, var2 = 0))

Как я могу сделать свой фрейм данных для любого конкретногодатировать все комбинации media и brand_short (т.е. 24 строки для каждой даты), но не объединять с label?

1 Ответ

0 голосов
/ 26 октября 2018

Ты слишком много думаешь об этом.Вам не нужно ничего вкладывать, потому что вам нужны все возможные комбинации data, media и brand_short.label не должно быть включено.Чтобы обновить метку, используйте оператор mutate впоследствии.

ex %>% complete(data,media,brand_short,fill=list(var1=0,var2=0)) %>%
mutate(label=paste('ntv0',media,brand_short,sep='_'))
# A tibble: 168 x 6
   data       media      brand_short label                    var1   var2
   <date>     <chr>      <chr>       <chr>                   <dbl>  <dbl>
 1 2016-07-01 Magazines  Brand A     ntv0_Magazines_Brand A      0      0
 2 2016-07-01 Magazines  Brand B     ntv0_Magazines_Brand B      0      0
 3 2016-07-01 Magazines  Brand C     ntv0_Magazines_Brand C      1 151900
 4 2016-07-01 Magazines  Brand D     ntv0_Magazines_Brand D      2 115483
 5 2016-07-01 Magazines  Brand E     ntv0_Magazines_Brand E      6 792500
 6 2016-07-01 Magazines  Brand F     ntv0_Magazines_Brand F      0      0
 7 2016-07-01 Newspapers Brand A     ntv0_Newspapers_Brand A     2   9240
 8 2016-07-01 Newspapers Brand B     ntv0_Newspapers_Brand B     3  41030
 9 2016-07-01 Newspapers Brand C     ntv0_Newspapers_Brand C     2 146280
10 2016-07-01 Newspapers Brand D     ntv0_Newspapers_Brand D     1  45000
# ... with 158 more rows
...