私は、既存のデータフレームに新しいバイナリ変数を生成するカスタム関数を作成しようとしています。この考えは、診断記述(文字列)、ICD9診断コード(番号)、および患者データベースを関数に与えることができるようにすることです。この関数は、関心のあるすべての診断に対して新しい変数を生成し、患者(行または観測)が診断を有する場合には0または1を割り当てる。カスタム関数を使用して既存のデータフレーム内に新しいバイナリ変数を作成する方法は?
patient diag_1 diag_2 diag_3 Anemia
1 a 8661 8651 2430 0
2 b 2851 8674 3456 1
3 c 8651 2866 9089 0
:
diagnosis_func<-function(x,y,z,i){
pattern = paste("^(", paste0(x, collapse = "|"), ")", sep = "")
i$z<-ifelse(rowSums(sapply(i[y], grepl, pattern = pattern)) != 0,"1","0")
}
これは私が機能を実行した後に取得したいと思い何である:以下
x<-c("2851") #ICD9 for Anemia
y<-c("diag_1") #Primary diagnosis
z<-"Anemia" #Name of new binary variable for patient dataframe
i<-patient_db #patient dataframe
patient<-c("a","b","c")
diag_1<-c("8661", "2851","8651")
diag_2<-c("8651","8674","2866")
diag_3<-c("2430","3456","9089")
patient_db<-data_frame(patient,diag_1,diag_2,diag_3)
patient diag_1 diag_2 diag_3
1 a 8661 8651 2430
2 b 2851 8674 3456
3 c 8651 2866 9089
が関数である:
は、以下の機能変数です関数内の行は関数外でテストされており、workingです。私が立ち往生しているところでは、機能を働かせようとしています。どんな助けでも大歓迎です。
ハッピーニューイヤー
Albit
私はあなたの関数の戻り値がないと思います。あなたの関数に 'return(i)'という行を追加するだけで問題は解決します。 – raymkchow
あなたの迅速な返信Raymkchowに感謝します。私はちょうどリターン(i)を試みました、それはコンソールのデータフレームに値を設定しますが、新しい変数を追加しません。 –
Rのオブジェクトは不変なので、参照で 'i'を渡すことはできません。 'patient_db < - diagnosis_func(x、y、z、i)'のような変数を割り当てる必要があります。また、コードの4行目( 'i <-patient_db #patient dataframe')は' patient_db'の宣言の後に置かれ、正しい 'i'が得られます。 – raymkchow