Нецикличный способ присвоения одному столбцу в соответствии со значением другого столбца - PullRequest
0 голосов
/ 10 июля 2019

Я хочу заполнить пропущенные значения одного столбца в соответствии со значениями другого столбца из другого фрейма данных.

Я практикую уборку в 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"]
  }
}

Я получил ожидаемый результат, который хотел - однако, есть ли более быстрый способ сделать это, который не проходит по каждой строке кадра данных?

1 Ответ

0 голосов
/ 11 июля 2019

Принимая во внимание вид спорта для каждого человека, вы можете использовать dplyr трубу, например:

olympic_tbl %>% group_by(Sport) %>% mutate(Age=ifelse(is.na(Age),mean(Age, na.rm=TRUE),Age))

Если значение равно na, оно будет обновляться по среднему значению группы.Иначе, он останется прежним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...