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

对r中的列应用mutate

  •  1
  • Yehuda  · 技术社区  · 6 年前

    我有一些缺失的数据,我正试图将它们归罪于每一列的平均值。我的代码,

    apply(train_new, 2, function(x) 
            mutate(
              ifelse(is.na(x) | x < 0, mean(x), x)
            )
    )
    

    是指将所有17列的数据输入到每列数据的平均值中,但这又会返回 Error during wrapup: no applicable method for 'mutate_' applied to an object of class "c('double', 'numeric')" ,并引导我进入调试屏幕。我相信这只是一个语法问题,但我对它在哪里感到困惑。

    样本数据:

    structure(list(INDEX = c(1, 2, 3, 4, 5, 6), TARGET_WINS = c(39, 
    70, 86, 70, 82, 75), TEAM_BATTING_H = c(1445, 1339, 1377, 1387, 
    1297, 1279), TEAM_BATTING_2B = c(194, 219, 232, 209, 186, 200
    ), TEAM_BATTING_3B = c(39, 22, 35, 38, 27, 36), TEAM_BATTING_HR = c(13, 
    190, 137, 96, 102, 92), TEAM_BATTING_BB = c(457.7607, 685, 602, 
    451, 472, 443), TEAM_BATTING_SO = c(842, 1075, 917, 922, 920, 
    973), TEAM_BASERUN_SB = c(97.288, 37, 46, 43, 49, 107), TEAM_BASERUN_CS = c(NA, 
    28, 27, 30, 39, 59), TEAM_PITCHING_H = c(NA, 1347, 1377, 1396, 
    1297, 1279), TEAM_PITCHING_HR = c(84, 191, 137, 97, 102, 92), 
    TEAM_PITCHING_BB = c(530.9595, 689, 602, 454, 472, 443), 
    TEAM_PITCHING_SO = c(737.105, 1082, 917, 928, 920, 973), 
    TEAM_FIELDING_E = c(NA, 193, 175, 164, 138, 123), TEAM_FIELDING_DP = c(146.234708045, 
    155, 153, 156, 168, 149), TEAM_BATTING_1B = c(1199, 908, 
    973, 1044, 982, 951)), row.names = c(NA, -6L), class = c("tbl_df", 
    "tbl", "data.frame"))
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   arg0naut91    6 年前

    你可以试试:

    library(dplyr)
    
    train_new %>%
      mutate_all(funs(ifelse(is.na(.) | . < 0, mean(., na.rm = T), .)))
    
        2
  •  0
  •   akrun    6 年前

    这里有一个选择 na.aggregate (从 zoo )

    library(zoo)
    na.aggregate(replace(train_new, train_new < 0, NA))