首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中使用dplyr标注行值(基于条件)以创建新要素

如何在R中使用dplyr标注行值(基于条件)以创建新要素
EN

Stack Overflow用户
提问于 2020-05-02 21:31:27
回答 1查看 326关注 0票数 2

原始数据集类似于虚拟数据集,这里我创建了一个新的列total sales basis sorted sales,并且对总销售额进行了df基础降序排序

代码语言:javascript
复制
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

视图(销售数据)

Question#1我需要将emp id分成成对(总共3对),从一开始到最后的方法(在总销售额上,从最高到最低,然后依此类推),它看起来应该类似于下面的块,这样“新的一组操作(Ques- 2)可以通过在每对上使用group_by(Pair_number)来执行。

期望在输出中显示此信息

代码语言:javascript
复制
   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

然后,我需要计算每对(p1,p2,p3)上的销售奖励"Day wise“(为每对创建4个新列),这将类似于,"P1”的奖励-DAY1(新列)-如果emp id - 15和10的销售值都大于5(单独),则将额外的销售值乘以50。所以最小标准是5+5= 10,任何大于10的值都是*乘以50。对于Day1上的P1,它是9+5 = 14,额外销售价值是4,因此第1天/派对1的激励值加起来是200,否则该对将被取消当天的激励资格。

预期输出

代码语言:javascript
复制
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      
EN

回答 1

Stack Overflow用户

发布于 2020-05-02 21:49:24

对于您的第一个问题

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61560201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档