非等価結合では次のことが可能であるが、それを機能させることはできないと考えている。この質問への拡張の並べ替え私は数週間前に尋ねた:Fast way to find min in groups after excluding observations using R。データテーブルを使用して、行固有の条件を満たす行をグループ内で検索する
私はアプリケーションのデータセットを持っています。スコアがカットオフを上回る場合、あなたは認められます。今、どのアプリケーションが厳しく支配されているのかを特定したいと思います。私。誰かが別の選択肢よりも低いマージンを持つ選択肢を優先順位付けし、その選択肢に決して入らないときは、
I.e.特定の行のcutoff
を、同じグループ内のより低い優先度を持つすべての行と比較すると、低い優先度を持つより高い優先順位(低優先度)の選択肢がある場合、dominated = TRUEに設定します。
次のコードは動作しますが、かなりくそは遅いです:はい、それは非エクイで行うことができます
library(data.table)
dt <- data.table(prio = c(c(1,2,4,5,6,7,8), c(1,2,4,5), c(1,2,4,5,6,7,8), c(1,2,4,10,13)),
c = c(c(20,16,19,20,21,11,22), c(1.5, 1.3, 1.7, 1.2), c(20,16,19,20,21,11,22), c(123,332,121,334,335)),
admission_group = c(rep("X", 7), rep("Y", 4), rep("X", 7), rep("Z", 5)),
individual = c(rep("A", 11), rep("B", 12)),
dominated = rep(FALSE, 23))
dt[,
min_c_lower_prio :=
unname(sapply(split(outer(prio,prio, "<="),
rep(1:length(prio),
each = length(prio))),
FUN = function(x) min(c[x], na.rm = TRUE))),
by = .(admission_group, individual)
]
dt[c > min_c_lower_prio, dominated := TRUE]
ありがとうございます! cumminの使用は、これでははるかに簡単です。すばらしいです! – adamski