Как установить условие нескольких столбцов в R? - PullRequest
0 голосов
/ 02 февраля 2019

Все,

Мой dataset выглядит следующим образом.Я пытаюсь ответить на вопрос ниже.

Вопрос:

Основано ли ТОЛЬКО на данных рисовальной бумаги, продает ли хранилище больше единиц (столбец units.sold) одного подтипа бумаги (paper.type), чем другие?

Чтобы ответить на поставленный выше вопрос, я использовал функцию tapply, где мне удалось отфильтровать данные для обеих статей.Теперь я не уверен, как действовать дальше, чтобы получить только данные рисовальной бумаги.Любая помощь приветствуется!

Мой код

tapply(df$units.sold,list(df$paper,df$paper.type,df$store),sum)

Набор данных

             date year     rep     store paper          paper.type  unit.price   units.sold total.sale
9991  12/30/2015 2015     Ran    Dublin watercolor      sheet       0.77          5       3.85
9992  12/30/2015 2015     Ran    Dublin    drawing       pads      10.26          1      10.26
9993  12/30/2015 2015  Arijit  Syracuse watercolor        pad      12.15          2      24.30
9994  12/30/2015 2015  Thomas Davenport    drawing       roll      20.99          1      20.99
9995  12/31/2015 2015   Ruisi    Dublin watercolor      sheet       0.77          7       5.39
9996  12/31/2015 2015   Mohit Davenport    drawing       roll      20.99          1      20.99
9997  12/31/2015 2015    Aman  Portland    drawing       pads      10.26          1      10.26
9998  12/31/2015 2015 Barakat  Portland watercolor      block      19.34          1      19.34
9999  12/31/2015 2015  Yunzhu  Syracuse    drawing    journal      24.94          1      24.94
10000 12/31/2015 2015    Aman  Portland watercolor      block      19.34          1      19.34

Примечание: я новичок вR.Пожалуйста, предоставьте объяснение вместе с вашим кодом.

Ответы [ 3 ]

0 голосов
/ 02 февраля 2019

использовать dplyr с tidyverse и запускать функцию filter.Вы можете связать воедино функции с помощью оператора %>%.

df2 <- df %>% 
  filter(paper == "drawing") %>% 
  group_by(store, paper.type) %>% 
  summarise(units.sold = sum(units.sold))

  store     paper.type units.sold
  <chr>     <chr>           <dbl>
1 Davenport roll                2
2 Dublin    pads                1
3 Portland  pads                1
4 Syracuse  journal             1
0 голосов
/ 02 февраля 2019

Мы можем использовать data.table.Преобразуйте «data.frame» в «data.table» с помощью setDT, сгруппированного по «store» и «paper.type», укажите выражение i (paper == 'drawing') для подмножества строк и суммируйте «единицы».продано ', получив sum его

library(data.table)
setDT(df)[paper == "drawing", .(units.sold = sum(units.sold)), .(store, paper.type)]
#       store paper.type units.sold
#1:    Dublin       pads          1
#2: Davenport       roll          2
#3:  Portland       pads          1
#4:  Syracuse    journal          1

данных

df <-  structure(list(date = c("12/30/2015", "12/30/2015", "12/30/2015", 
"12/30/2015", "12/31/2015", "12/31/2015", "12/31/2015", "12/31/2015", 
"12/31/2015", "12/31/2015"), year = c(2015L, 2015L, 2015L, 2015L, 
2015L, 2015L, 2015L, 2015L, 2015L, 2015L), rep = c("Ran", "Ran", 
"Arijit", "Thomas", "Ruisi", "Mohit", "Aman", "Barakat", "Yunzhu", 
"Aman"), store = c("Dublin", "Dublin", "Syracuse", "Davenport", 
"Dublin", "Davenport", "Portland", "Portland", "Syracuse", "Portland"
), paper = c("watercolor", "drawing", "watercolor", "drawing", 
"watercolor", "drawing", "drawing", "watercolor", "drawing", 
"watercolor"), paper.type = c("sheet", "pads", "pad", "roll", 
"sheet", "roll", "pads", "block", "journal", "block"), unit.price = c(0.77, 
10.26, 12.15, 20.99, 0.77, 20.99, 10.26, 19.34, 24.94, 19.34), 
    units.sold = c(5L, 1L, 2L, 1L, 7L, 1L, 1L, 1L, 1L, 1L), total.sale = c(3.85, 
    10.26, 24.3, 20.99, 5.39, 20.99, 10.26, 19.34, 24.94, 19.34
    )), class = "data.frame", row.names = c("9991", "9992", "9993", 
"9994", "9995", "9996", "9997", "9998", "9999", "10000"))
0 голосов
/ 02 февраля 2019

Вы можете начать, взяв aggregate из unit.sold столбца на основе store и paper.type

aggregate(units.sold~store+paper.type, df[df$paper == "drawing", ], sum)

#      store paper.type units.sold
#1  Syracuse    journal          1
#2    Dublin       pads          1
#3  Portland       pads          1
#4 Davenport       roll          2

Здесь мы фильтруем данные только для типа "рисование" paper.Мы можем сравнить число units.sold для каждого store и paper.type на основе этого вывода.

...