我有两个数据帧。关于具有多个值的材料编号的第一个数据帧信息。例如:
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个材料编号。
将材料编号分组并将其运行到函数中的最佳方法是什么?
发布于 2021-08-17 17:32:11
正如在chat中所讨论的,无需进一步调试即可将代码应用到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))https://stackoverflow.com/questions/68820215
复制相似问题