Подстановка данных с использованием нескольких условий

Я пытаюсь заменить значения столбца наблюдением, учитывая набор условий. Данные как дано:

Sex     Age
male    34.5
female  NA
male    62
male    NA

Я хочу заменить данные, где пол женский, а возрастное значение равно NA.

В настоящее время я использую цикл for:

for(i in 1:length(data$Sex){
     if(data$Sex[i]=="male"){
        if(is.na(data$Age[i])){
            data$Age[i] <- 30.7
        }
    }
 }

и это прекрасно работает. Мне было любопытно, правильно ли я понял или есть вычислительно более простой способ получить это правильно.

Заранее спасибо.:)

2 ответа

Решение

Попробуй это:

 data[data$Sex=='female' & is.na(data$Age),'Age']<-30.7

Предполагая, что вы хотите заменить "женский", как описано в тексте (вместо "мужской", как это сделано в вашем коде):

library(dplyr)

data %>%
  mutate(Age = if_else(Sex == "female" & is.na(Age), 30.7, Age))

Выход:

# A tibble: 4 x 2
     Sex   Age
   <chr> <dbl>
1   male  34.5
2 female  30.7
3   male  62.0
4   male    NA
Другие вопросы по тегам