2017-12-07 2 views
0

R(Framingham Heart Studyのデータ)にデータセットがあり、BMIグループを " 「正常」、「太り過ぎ」、および「肥満」を含む。Rでグループを割り当てようとしましたが、NAの値を入力してグループに属する他のグループが見つかりません

これは11,000以上の観測値と38個の変数/列を持ちますので、ここにデータの一部を投稿するのは難しいでしょう(これがなければ、それほど大きな問題にならないといいですね)。

データセットがFRMと呼ばれ、私は次のようにサブセットしようとしています:「」

frm$BMIGRP <- NA #Creating new variable (this part works and creates a BMIGRP column with all NA values) 
frm$BMIGRP[which(as.numeric(frm$BMI) < 18.5)] <- "underweight" 

しかし、私が持っている、と示されたデータセットBMI変数(中NA値がありますまた、NAに変更しようとしました)。

私は各グループに対してこの方法をサブセット化しようとすると、いくつかのアンダーウェイト値を「アンダーウェイト」に割り当てており、多くのNA/"。値を過小評価することもできます。それから私は、データセットを見ることができるので、ちょうど真実ではない肥満のカテゴリーに10の "正常な"体重の被験者と約11000があることを私に伝えます。

これが正しく行われると、各カテゴリに数百から数千の観測値を持つ4つのグループが作成されます。しかし、私は唯一の正常10、肥満体重71、および肥満〜11,000を得ています。

私はこの問題にどこが間違っているのか分かりません。また、新しい変数を作成して同じ種類の方法で割り当てることもできます。どんな助力も非常に感謝しています。

私は教授がラボセッションの一例として私たちに与えたコードであり、基本的には私のデータセットの適切な置き換えでそれをコピーして貼り付けています。

これは私のウェブサイトの最初の質問ですので、不完全な場合、または詳細情報を提供する必要がある場合はお詫び申し上げます。ありがとう!

+0

BMI列class(frm $ BMI)のクラスを確認してください。数値でなければなりません。 – leeum

+0

それは数字ではありませんでした。何らかの理由でcharでした。ありがとう! –

答えて

0

コードを読んでいると、列が数値ではないようです。

これは動作するはずです:

frm$BMI <- as.numeric(frm$BMI) 
frm$BMIGRP[frm$BMI < 18.5] <- "underweight" 
+0

インポートデータセットボタンを使用してデータセットを再インポートしようとしましたが、列が数値ではないことがわかりました(何とかcharでしたか?)、数値に変更しました。その後、私はあなたのコードを使用し、それは働いた!私はそれがfrm $ BMIGRP [frm $ BMI <18.5]と言っていたと思うので、代わりにそれを試みました。ありがとう! –

+0

私はそれが正しいことを正解します。それはあなたのためにそれを固定してうれしいです。私のコードを更新しました – leeum

0

@leeumが言ったように。 BMIが数字であることを確認してください。 BMIに基づいて新しいカテゴリの列を作成する場合は、case_whendplyrからご覧ください。だから、多分これはあなたが何を望むかである:

library(dplyr) 

frm <- frm %>% 
    mutate(BMI = as.numeric(BMI)) %>% 
    mutate(BMIGRP = case_when(
    BMI < 18.5 ~ 'underweight', 
    between(BMI, 18.5, 24.9) ~ 'healthy weight', 
    between(BMI, 25, 29.9) ~ 'overweight', 
    BMI > 30 ~ 'obese') 
) 

mutate(BMIGRP = as.numeric(BMIGRP))は、数値にBMIGRP列に変換します。 mutate(BMIGRP = case_when(...)BMIGRPと呼ばれる新しい列を作成し、BMIに基づいて「体重不足」、「体重過剰」、「体重超過」または「肥満」を割り当てます。引数が適用されない場合、NAが割り当てられます。

関連する問題