以前は SAS で働いていましたが、学術的な要件の理由から R に移行することにしました。私のデータ (healthdemo) は、いくつかの健康診断コード (ICD-10) を含む健康データです。これらのコードを異なる列に分けたいと考えています。これは str(healthdemo) の一部です。
$ PATIENT_KEY : int 7391510 7404298 7390196 7381208 7401691 7381223 7383005 10188634 7384574 7398317 ...
$ ICDCODE : Factor w/ 1125 levels "","H00","H00.0",..: 654 56 654 654 665 48 90 679 654 654 ...
$ PATIENT_ID : int 39387 50244 38388 27346 49922 27901 27867 61527 33186 45309 ...
$ DATE_OF_BIRTH : Factor w/ 14801 levels "","01/01/1000",..: 7506 10250 52 73 94 6130 85 2710 95 100 ...
ICDCODE には、H00 から J99 までの多くの疾患が含まれています。最初に、ICDCODE で文字と数字を分離しました
healthdemo$icd_char = substr(healthdemo$ICDCODE,1,1)
healthdemo$icd_num = substr(healthdemo$ICDCODE,2,2)
次に、この関数で病気の列を作成しました。
healthdemo$cvd = 0
healthdemo$ihd = 0
healthdemo$mi = 0
healthdemo$dys = 0
healthdemo$afib = 0
healthdemo$chf = 0
ここで、この SAS 関数 (私が使用していたもの) に似た関数を適用したいと思います。
if icd_char = 'I' and 01 <= icd_num < 52 then cvd = 1;
if icd_char = 'I' and 20 <= icd_num <= 25 then ihd = 1;
if icd_char = 'I' and 21 <= icd_num <= 22 then mi = 1;
if icd_char = 'I' and 46 <= icd_num <= 49 then dys = 1;
if icd_char = 'I' and icd_num = 48 then afib = 1;
この関数は、指定された ICD 文字と ICD 番号を持つ各患者を cvd=1 (例) などに割り当てます。
Rでこれらの関数を使用しようとしましたが、うまくいきませんでした:
healthdemo$cvd[healthdemo$icd_char == 'I' & 01 <= healthdemo$icd_num
& healthdemo$icd_num < 52 ] <- 1
この
if (healthdemo$icd_char == "I" & 01 < = healthdemo$icd_num < 52 )
{healthdemo$cvd <- 1}
誰か助けてくれませんか?