原始数据集与虚拟数据集类似,这里我根据当日销售总额新建了一列销售总额,同时我还根据销售总额的降序进行了df排序。
library(dplyr)
empid <- c(10,11,12,13,14,15) # Employee id
city <- c("Goa","Goa","Goa","Goa","Goa","Goa") # City
Day1 <- c(5,15,5,9,2,9) # Sales made on Day 1 and so on...
Day2 <- c(5,3,8,5,10,7)
Day3 <- c(3,9,6,4,8,10)
Day4 <- c(7,6,8,8,2,8)
salesdata <- data.frame(empid,city,Day1,Day2,Day3,Day4)
#str(salesdata)
salesdata<- salesdata %>% mutate(Total_Sales = rowSums(.[3:6])) ## New Column creation Total sales
salesdata <- salesdata[order(-salesdata$Total_Sales),] ## Sorting df - salesdata, basis total sales value in descending order
查看(销售数据)
问题1 我需要将emp id按对子(共3对)从先到后的方式(在总销售额上,先从最高到最低,然后依次类推)进行分组,它应该类似于下面的块,这样 "新的一组操作(Ques- 2)可以通过在每对上使用group_by(Pair_number)来执行。
empid city Day1 Day2 Day3 Day4 Total_Sales Pair_number
15 Goa 9 7 10 8 34 P1
10 Goa 5 5 3 7 20 P1
11 Goa 15 3 9 6 33 P2
14 Goa 2 10 8 2 22 P2
12 Goa 5 8 6 8 27 P3
13 Goa 9 5 4 8 26 P3
问题2.我需要对每对(p1,p2,p3)计算 "日 "的销售激励(为每对建立4个新的列)。那么我需要计算每对(p1,p2,p3)的 "日 "销售奖励(为每对建立4个新列),就像 "P1 "的Incentive-Day1(新列)-如果两个emp id-15 & 10的销售值大于5(单独),那么将额外的销售值乘以50.所以最小标准是5+5=10,大于10的值要*乘以50. 所以最小标准是5+5=10,任何大于10的值都要*乘以50。对于P1来说,第1天的数值是9+5=14,额外的销售值是4,所以Day1Pair1的激励值加起来是200,否则这对组合将被取消当天的激励资格。
empid city Day1 Day2 Day3 Day4 Total_Sales Pair_number Incent-Day1 Incent-Day2 Incent-Day3
15 Goa 9 7 10 8 34 P1 200 100 Disqualified
10 Goa 5 5 3 7 20 P1
11 Goa 15 3 9 6 33 P2 Disqualified Disqualified 350
14 Goa 2 10 8 2 22 P2
12 Goa 5 8 6 8 27 P3 200 150 Disqualified
13 Goa 9 5 4 8 26 P3
对于你的第一个问题
library(tidyverse)
salesdata <- tibble(empid,city,Day1,Day2,Day3,Day4) %>%
mutate(Total_Sales = rowSums(.[3:6])) %>%
arrange(desc(Total_Sales)) %>%
rowid_to_column("Pair_number") %>%
mutate(Pair_number = paste0("P", floor((Pair_number + 1) / 2 ))) %>%
select(empid, city, Day1, Day2, Day3, Day4, Total_Sales, Pair_number )
但我有一些建议。
NA
而不是。