代码之家  ›  专栏  ›  技术社区  ›  cephalopod

如何使用dplyr::nest计算两个数据集之间的差异

  •  0
  • cephalopod  · 技术社区  · 7 年前

    1) 我有一个名为“优步”的事务文件
    2) 我还有一个“目标”df,我需要与我的“优步”总数匹配

    优步数据-事务文件

    UBER <- data.frame(
        Cube = c("UBER", "UBER", "UBER", "UBER"),
     Country = c("AU", "AU", "AU", "AU"),
     Product = c("0001", "0001", "0001", "0001"),
         LOB = c("xxx", "xxx", "xxx", "xxx"),
      Mth_Yr = 1:4,
     Revenue = c(5, 5, 5, 5)
        )
    

    Target <- data.frame(
        Cube = c("Target", "Target", "Target", "Target"),
     Country = c("AU", "AU", "AU", "AU"),
     Product = c("0001", "0001", "0001", "0001"),
         LOB = c("xxx", "xxx", "xxx", "xxx"),
      Mth_Yr = 1:4,
     Revenue = c(10, 10, 10, 10)
          )
    

    我建立了一个函数来帮助我进行分析:

    target_less_uber <- function(df){
    
      target <- df %>% #as.data.frame() %>%
            filter(Cube == "Target") %>%
            select(Revenue) %>% as.numeric()
    
      uber  <- df %>% #as.data.frame() %>%
            filter(Cube == "UBER") %>%
            select(Revenue) %>% as.numeric()      
    
      output <- data.frame(Overlay = target - uber)
    
      return(output)
    

    }

    library(dplyr)
    library(purrr)
    
    ALL <- rbind(Target, UBER)
    ALL %>%
          nest(Cube, Revenue) %>%
          transmute(Country, Product, LOB, Mth_Yr, res = map(data, target_less_uber) %>% unnest 

    非常感谢任何帮助建议。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Z.Lin    7 年前

    我不太熟悉 nest()

    inner_join(UBER %>% select(-Cube) %>% rename(UBER = Revenue),
               Target %>% select(-Cube) %>% rename(Target = Revenue)) %>%
      mutate(overlay = Target - UBER) %>%
      select(-UBER, -Target)