我是医学研究员。我有一个非常大的管理数据库,其中诊断包含在标题为dx1-dx15(dx =诊断)的列中。这些列包含R中的字符形式的数字/字母代码。我已经编写了通过这些dx列运行的代码,但是希望以数组的形式重写代码。我可以在SAS中轻松地做到这一点,但是发现在R中很难做到这一点。
我正在附上我在这里使用的代码:
a <- as.character(c("4578","4551"))
#在这里,我首先确定我感兴趣的诊断代码。
然后,我在数据框cancer
中创建一个新变量df
,并使用此代码来识别癌症患者。根据诊断,新的变量df $ cancer将为0或1。
代码工作正常,但正如您所见,根本不够整洁。
df$cm_cancer <- with(df, ifelse((dx3 %in% a | dx4 %in% a | dx5 %in% a |
dx6 %in% a | dx7 %in% a | dx8 %in% a | dx9 %in% a |
dx10 %in% a | dx11 %in% a | dx12 %in% a | dx13 %in% a |
dx14 %in% a | dx15 %in% a), 1, 0))
使用SAS,我可以用下面这段优美的代码来做到这一点:
data df2;
set df;
cancer = 0;
array dgn[15] dx1 - dx15;
do i = 1 to 15;
if dgn[i] in ("4578","4551") then
cancer = 1;
end;
drop i;
run;
我拒绝相信SAS比R具有更好的答案;只是同意我仍然是使用R的新手。
欢迎任何帮助;相信我,我已经尝试过用Google搜索R中的数组,R中的循环;任何可以帮助我更好地重写此代码的东西。