【问题标题】:R loop for replacing NA's in multiple columns with mean of selected columnsR循环用选定列的平均值替换多列中的NA
【发布时间】:2021-02-26 04:58:43
【问题描述】:

我有一个包含 96 个不同变量的数据表,包括 17 个不同周的每周参加 NFL 比赛的人数。

df 的 colnames 如下所示:

colnames(df)
 [1] "NFL_team_name"        "year"                 "season_performance"   "margin_of_victory"    "strength_of_schedule"
 [6] "simple_rating"        "offensive_ranking"    "defensive_ranking"    "playoffs"             "sb_winner"           
[11] "price"                "weekly_attendance.1"  "day.1"                "time.1"               "home_ind.1"          
[16] "winner.1"             "weekly_attendance.2"  "day.2"                "time.2"               "home_ind.2"          
[21] "winner.2"             "weekly_attendance.4"  "day.4"                "time.4"               "home_ind.4"          
[26] "winner.4"             "weekly_attendance.5"  "day.5"                "time.5"               "home_ind.5"          
[31] "winner.5"             "weekly_attendance.6"  "day.6"                "time.6"               "home_ind.6"  

等等..

一些每周出勤列有 NA,我想根据行号将其余每周出勤列的平均值放入其中。 每周出勤数列是 12,17,22,27...,如下所示。 我已经尝试过类似以下的方法,但我真的不知道如何让它工作:

所有具有每周属性的行:

mean(df[1,c(12,17,22,27,32,37,42,47,52,57,62,67,72,77,82,87,92)])

表示每行(团队和年份)的每周考勤列:

rowmeans <- as.data.table(rowMeans(df[,c(12,17,22,27,32,37,42,47,52,57,62,67,72,77,82,87,92)], na.rm = T))

使用 rowmeans 替换 na's (SOMETHING LIKE THIS):

for (i in 1:nrow(df)) {
  if (is.na(df[i,])) {
    df[i,] <- rowmeans[i,]
  }
  else
    next
}

所以我想要的是根据每行中每周出勤列的平均值填写每行中的 NA。

希望它是有道理的,并且你们中的一些人可以告诉我缺少什么。

【问题讨论】:

    标签: r loops row mean na


    【解决方案1】:

    如果没有Minimal Reproducible Example 就很难确定,但您可以尝试以下方法:

    # find column names with weekly attendance figures
    wa_cols <- grep("weekly_attendance", colnames(df), value=TRUE)
    
    # calculate the mean for each row for just those columns
    wa_mean <- rowMeans(df[, wa_cols], na.rm=TRUE)
    
    # loop over weekly attendance columns, filling in if missing
    for (x in wa_cols) {
      df[[x]] <- ifelse(is.na(df[[x]]), wa_mean, df[[x]])
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-11
      • 2020-07-14
      • 2017-06-30
      • 1970-01-01
      • 2020-07-04
      • 2017-11-08
      • 2020-04-23
      • 1970-01-01
      相关资源
      最近更新 更多