2016-12-07 11 views
0

私はいくつかのことをしてループを作成する使命を帯びています: ループ内の空の行にNA値を追加するにはどうすればよいですか?

  • 変数「高さ」が利用できる最初の訪問(すでに事前に注文した)
  • が追加選択のため

    1. が欠落しているデータを持つ行を排除

    本質的に、目標は、各患者内の一連の観測値から最初の欠損していない高さ値を得ることです。あなたが見ることができるように

    for (i in 1:length(patients)){ 
    
    # select data for one patient 
    patient = patients[i] 
    SubjectID_patient = filter(DF, Subject.ID == patient) 
    
    #select data which is not missing 
    complete_hts=filter(SubjectID_patient, 
    !is.na(SubjectID_patient$height_cm)) 
    
    #select first visit for height 
    complete_hts=complete_hts[!duplicated(complete_hts$Subject.ID),] 
    
    # if there are 0 entries remaining, return NAs 
    ???? 
    
    #make dataframe for the patient 
    df_patient = data.frame(Subject.ID = complete_hts$Subject.ID, 
             height = complete_hts$height_cm) 
    
    ##bind rows of this dataframe to first dataframe 
    baseline_new = rbind(baseline_new, df_patient) 
    
    } 
    

    だから、私はにこだわっている:すべての患者はので、私はこれが私の試みであるこのタスクのためのループを作成するために

    を助言された観測や「missingness」の異なる量を持っています特定の患者の「高さ」変数の項目が0件の場合は、NAsを返します。このループは、0の有効な値がある場所にアクセスし、最後にデータフレームを作成できないため、正常に動作します。どんな提案も高く評価されます。これが私の最初の投稿であるので、不適切な書式設定があればそれを許してください!

    ありがとうございます!

  • +0

    することができますdat [!is(dat $ height)]を実行して高さがnaの行をすべて削除し、患者リストをdata.frameに残っているものに更新してから設定します。あなたはおそらくforループなしでこれを行うことができますが、それは速くなるでしょう。 – Kristofersen

    答えて

    0

    のみNASはSubjectID_patient $ height_cmに存在する場合、complete_htsは空data.frameとnrow(complete_hts)でなければなりません0に等しいはずであるあなたが使用できる場合はそれに基づいて声明:

    if (nrow(complete_hts)!=0) { 
    #select first visit for height 
    complete_hts=complete_hts[!duplicated(complete_hts$Subject.ID),] 
    } else { 
    complete_hts$height_cm=NA 
    } 
    
    #make dataframe for the patient 
    df_patient = data.frame(Subject.ID = complete_hts$Subject.ID, 
            height = complete_hts$height_cm) 
    
    ##bind rows of this dataframe to first dataframe 
    baseline_new = rbind(baseline_new, df_patient) 
    } 
    
    関連する問題