Я хочу заполнить пропущенные значения одного столбца в соответствии со значениями другого столбца из другого фрейма данных.
Я практикую уборку в R и использую файл "athlete_events.csv" из этого набора данных Kaggle https://www.kaggle.com/heesoo37/120-years-of-olympic-history-athletes-and-results
Я хочу заменить пропущенные значения в столбце «Возраст» для каждого спортсмена средним возрастом вида спорта, в котором соревновался этот спортсмен.
Я все еще начинающий, поэтому может быть несколько лишних битов кода.
Но сначала я прочитал в файле:
olympic_tbl = read_csv("athlete_events.csv", n_max = 500)
Затем я создаю новый фрейм данных под названием "mean_sport_age", содержащий две колонки - Спорт и средний возраст участников в этом виде спорта. Я изменяю метку строки на имя Sport, а имена столбцов для упрощения индексации.
mean_sport_age = olympic_tbl %>% group_by(Sport) %>% summarize(mean(Age, na.rm=TRUE))
mean_sport_age = as.data.frame(mean_sport_age)
row.names(mean_sport_age) = mean_sport_age$Sport
colnames(mean_sport_age) = c("Sport","Age")
Затем я перебираю каждую строку исходного кадра данных, проверяю, отсутствует ли значение Age, и, если оно отсутствует, я просматриваю вид спорта спортсмена, а затем использую его, чтобы найти средний возраст для этого вида спорта. , чтобы заменить отсутствующее значение в столбце возраста:
for (i in 1:500) {
if (is.na(olympic_tbl[i,]$Age)){
sport = olympic_tbl[i,]$Sport
olympic_tbl[i,]$Age = mean_sport_age[sport,"Age"]
}
}
Я получил ожидаемый результат, который хотел - однако, есть ли более быстрый способ сделать это, который не проходит по каждой строке кадра данных?