首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:基于dyplr中多个条件的总结

R:基于dyplr中多个条件的总结
EN

Stack Overflow用户
提问于 2020-02-24 18:36:10
回答 1查看 77关注 0票数 1

我正在试图总结一个数据文件,以创建两个摘要:

  1. 只显示QUOTQUOG的订单数量
  2. 计算QUOTQUOG出现的订单数量,以及出现其他Holds的位置。

下面是代码的开始:

代码语言:javascript
复制
library(dplyr)


dat <- data.frame(Order = c(123,123,123,145,145,189,210,210,123,123,164), 
                  Location = c("Chicago","Chicago","Chicago","Chicago","Chicago","Chicago","Chicago","Chicago","Charlotte","Charlotte","Charlotte"),
                  Hold = c("QUOT","ENGR","VEND","QUOG","ENGR","QUOT","ENGR","VEND","QUOT","CUST","QUOT")
)


test <- dat %>%
  group_by(Order, Location) %>%

  .....

我一直试图找出一个特定的订单是否只有QUOTQUOG,然后它是否有QUOTQUOG等。

预期产出:

代码语言:javascript
复制
   Location Only Multiple
1   Chicago    1        2
2 Charlotte    1        1

因此,对于预期产出:

  • 第123号订单:芝加哥:有QUOT和另一个控股(ENGR & VEND),因此这将被视为芝加哥的multiple
  • 第145号订单:芝加哥:有QUOG和另一个控股(ENGR),因此这将被视为芝加哥的multiple
  • 第189号订单,芝加哥:有QUOT在里面,没有其他的搁置,所以这将被认为是芝加哥唯一的。
  • 第210号订单,芝加哥:既没有QUOT也没有QUOG,所以这个命令使在计数中排除了
  • 第123号命令,夏洛特:有QUOT和另一个控股(CUST),所以这将被认为是夏洛特的多重
  • 第164号命令,夏洛特:有QUOT在里面,没有其他的搁置,所以对于夏洛特来说,这将被视为唯一的
EN

回答 1

Stack Overflow用户

发布于 2020-02-25 22:15:38

下面是使用dplyrtidyr的另一种解决方案。这一次,首先进行旋转,然后进行过滤和总结,以获得您的解决方案。

代码语言:javascript
复制
library(dplyr)
library(tidyr)

dat.summary <- dat %>%
  mutate(hold_count = 1) %>% 
  pivot_wider(names_from = Hold, values_from = hold_count) %>% 
  mutate(only = if_else((QUOT == 1 | QUOG == 1) & is.na(ENGR) & is.na(VEND) & is.na(CUST), 1, 0),
         multiple = if_else((QUOT == 1 | QUOG == 1) & (ENGR == 1 | VEND == 1 | CUST ==1), 1, 0)) %>% 
  group_by(Location) %>% 
  summarise(only = sum(only, na.rm = T), multiple = sum(multiple, na.rm = T))

dat.summary

给你:

代码语言:javascript
复制
# A tibble: 2 x 3
  Location   only multiple
  <fct>     <dbl>    <dbl>
1 Charlotte     1        1
2 Chicago       1        2

数据

代码语言:javascript
复制
dat <- data.frame(
  Order = c(123,123,123,145,145,189,210,210,123,123,164), 
  Location = c("Chicago","Chicago","Chicago","Chicago","Chicago","Chicago","Chicago","Chicago","Charlotte","Charlotte","Charlotte"),
  Hold = c("QUOT","ENGR","VEND","QUOG","ENGR","QUOT","ENGR","VEND","QUOT","CUST","QUOT")
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60382037

复制
相关文章

相似问题

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