首页 > 解决方案 > 如何将两个不同的数据帧分组为R中函数的输入

问题描述

我有两个数据框。关于具有多个值的物料编号的第一个数据帧信息。例如:

df1 =

materialNumber value
  A             10
  A             20
  A             30
  A             40
  B             1
  B             2
  B             43
  C             12 
  C             19
  

然后是另一个数据框,它只包含 df1 中相同材料编号的单个值。

df2=

Materialnumber Value
 A               300
 B                13 
 C                18

我试图确定数据框 2 中的值与数据框 1 中的值相比是否为异常值。我编写了一个函数来执行此操作。但是,我有超过 10,000 个材料编号。

将材料编号分组并将其运行到函数中的最佳方法是什么?

标签: rdplyr

解决方案


正如这里的聊天中所讨论的,您的代码适用于 df1 和 df2 ,无需进一步调试:

dixon_test_results <- function(materialNumber,forecast){
  EKPO_Values <- df1 %>%
      dplyr::filter(materialNumber == materialNumber) %>%
      dplyr::pull(value)

  Q = abs(forecast-EKPO_Values[which.min(abs(EKPO_Values - forecast))])/diff(range(EKPO_Values))

  print(Q)
  # assumes 95% confidence
  # reference: webspace.ship.edu/pgmarr/…


  dixon_q_table_val <- switch(
  length(EKPO_Values)-1, # assumes that the forecast is now part of the EKPO data set, but values assume n = 3, so  
  length(ekpo)+forecast()
  0.9411,
  0.7651,
  0.6423,
  0.5624,
  0.5077,
  0.4673,
  0.4363,
  0.4122,
  0.3922,
  0.3755,
  0.3615,
  0.3496,
  0.3389,
  0.3293,
  0.3208,
  0.3135,
  0.3068,
  0.3005,
  0.2947,
  0.2895,
  0.2851,
  0.2804,
  0.2763,
  0.2725,
  0.2686,
  0.2655,
  0.2622,
  0.2594
  )

  if (Q>dixon_q_table_val) {
      return(materialNumber)
      } else {
      return(NA_charcter_)
  }
}

df2 %>%
    dplyr::mutate(res = dixon_test_results (Materialnumber , Value))

推荐阅读