これを行うには、より洗練された、よりclunkyで速い方法があるのだろうかと思っていました。私は、臨床データをコードするICDを持つ何百万もの行を持っています。以下に簡単な例を示します。私は特定の診断コードセットに合ったいずれかの列に基づいてデータセットをサブセット化しました。以下のコードは動作しますが、Rで年月を要し、より高速な方法があるかどうか疑問に思っていました。data.tableを使用して複数の列に基づいて行をサブセット化する - 最速の方法
structure(list(eid = 1:10, mc1 = structure(c(4L, 3L, 5L, 2L,
1L, 1L, 1L, 1L, 1L, 1L), .Label = c("345", "410", "413.9", "I20.1",
"I23.4"), class = "factor"), oc1 = c(350, 323, 12, 35, 413.1,
345, 345, 345, 345, 345), oc2 = structure(c(5L, 6L, 4L, 1L, 1L,
2L, 2L, 2L, 3L, 2L), .Label = c("", "345", "I20.3", "J23.6",
"K50.1", "K51.4"), class = "factor")), .Names = c("eid", "mc1",
"oc1", "oc2"), class = c("data.table", "data.frame"), row.names = c(NA,
-10L), .internal.selfref = <pointer: 0x102812578>)
サブセット以下のコード「I20」又は「413」のいずれかのコードを満たすすべての行(これは、例えば、等「I20.4」または「413.9」として符号化されたすべてのコードを含むであろう
dat2 <- dat [substr(dat$mc1,1,3)== "413"|
substr(dat$oc1,1,3)== "413"|
substr(dat$oc2,1,3)== "413"|
substr(dat$mc1,1,3)== "I20"|
substr(dat$oc1,1,3)== "I20"|
substr(dat$oc2,1,3)== "I20"]
これを行うためのより高速な方法は、たとえば、私は、ループ特定のコード「I20」または「413」を探している列のそれぞれを通って、それらの行をサブセットできますか?ありますか?
https://cran.r-project.org/web/packages/icd/index.htmlに気づいていますか? – Hugh
問題はカラムが文字フォーマットになっていないことです。データを読み込むときにフォーマットを指定すると、 'substr'がはるかに高速になります。 – minem