【问题标题】:how to loop over all KPI's in my dataframe如何遍历我的数据框中的所有 KPI
【发布时间】:2021-12-17 15:57:05
【问题描述】:
for (i in colnames(outlier_df)){
  outliers <- outlier_df %>%
    group_by(factor, segment) %>%
    mutate(hinge_spread = 1.5*IQR(i),
           lwr = quantile(i, .25) - hinge_spread,
           upr = quantile(i, .75) + hinge_spread) %>%
    filter(i > upr | i < lwr)}

我正在尝试遍历数据帧中的所有 kpi,并获取该函数适用于一个异常值但不在循环中的异常值

eval(substitute(expr), envir, enclos) 中的错误: 如果 'na.rm' 为 FALSE,则不允许缺少值和 NaN 另外:警告消息: 在分位数(as.numeric(x), c(0.25, 0.75), na.rm = na.rm, names = FALSE, : 强制引入的 NAs

【问题讨论】:

    标签: r


    【解决方案1】:

    在转换为symbol 或使用.data 后,可以评估列名(!!)。此外,不要在每次迭代中更新相同的对象,而是将输出分配给 list

    outliers_list <- vector('list', ncol(outlier_df))
    names(outliers_list) <- names(outlier_df)
    
    
    for (i in colnames(outlier_df)){
      outliers_list[[i]] <- outlier_df %>%
        group_by(factor, segment) %>%
        mutate(hinge_spread = 1.5*IQR(.data[[i]]),
               lwr = quantile(.data[[i]], .25) - hinge_spread,
               upr = quantile(.data[[i]], .75) + hinge_spread) %>%
        ungroup %>%
        filter(.data[[i]] > upr | .data[[i]] < lwr)
     
    }
    

    【讨论】:

    • 嗨 akrun 谢谢你的回答,但是因子和段在数据框中,但我不想对它们执行计算,但我按它们分组,所以无法摆脱它们
    • @ahmad 你可能在mutate(更新)之后需要ungroup,然后你可以选择分组列%&gt;% select(-factor, -segment),或者如果你需要对数字列进行一些计算,%&gt;% mutate(across(where(is.numeric), yourfunction))
    猜你喜欢
    • 2022-09-24
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多