비공개 조인과 함께 다음을 수행 할 수 있어야한다고 생각하지만 작동하도록 관리 할 수는 없습니다. 이 질문에 대한 연장의 종류 나는 몇 주 전에 물었다 : Fast way to find min in groups after excluding observations using R.데이터 테이블을 사용하여 행 특정 기준을 충족하는 행에 대해 min을 찾으십시오.
데이터 세트가 있습니다. 점수가 컷오프보다 높으면 인정됩니다. 이제 어느 애플리케이션이 엄격하게 지배되고 있는지 파악하고 싶습니다. 나는. 누군가가 다른 선택보다 더 낮은 마진을 가진 선택을 우선시했을 때 그 선택에 결코 들어갈 수 없을 때.
e.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