2017-12-01 2 views
0

条件のセットを考慮して、列の観測値を置き換えようとしています。与えられたデータは、次のとおりです。複数の条件を使用してデータを置換する

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 
     } 
    } 
} 

この作品完璧に罰金。私はそれが正しいかどうか、またはこの権利を得る計算上より簡単な方法があるかどうか不思議でした。

ありがとうございます。 :)

+0

あなたのコードは 'male'が真であれば値を変更しますが、あなたの質問では、' Sex'が 'female'のときに' NA'を置き換えると言います。そして、はい、簡単な方法があります:両方を同時にチェックするブール条件を作成することができます。 – chb

答えて

0

これを試してみてください:

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

ここで何が起こっているのかを理解したい場合は、割り当てでサブセットを読んでください。たとえば、http://adv-r.had.co.nz/Subsetting.html#subassignment – Stanwood

+0

ありがとうございました、Shenglin Chen、前にコードを使用してみましたが、何が問題になったのか分かりません。今のところ完璧に動作します。リンクは素晴らしい読書です。 –

1

あなたが(むしろ、あなたのコード内で行ったように "男" より)本文中に記載されている "女性" を交換したいと仮定すると:

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 
+0

ありがとう!コードは完全に正常に動作します。そして、私は両方とも一緒に仕事をしたいと思っていたので、男性または女性のどちらかを交換しました。 –

+0

喜んで私は助けになるかもしれません – jjl

関連する問題