특정 조건을 충족하는 전체 요소 중에서 하위 집합을 선택하고 싶습니다. 약 20 개의 요소가 있으며 각 요소에는 여러 속성이 있습니다. 하나의 속성에 대해 고정 된 기준에서 가장 적은 양의 불일치를 제공하고 다른 속성에 대해 가장 높은 평균값을 제공하는 다섯 가지 요소를 선택하고 싶습니다.기준에 따라 요소의 하위 집합 선택 및 확인
마지막으로 20 개 요소의 여러 세트에이 기능을 적용하고 싶습니다.
지금까지 "손으로"부분 집합을 식별 할 수 있었지만 값 자체를 반환하는 것 외에도 값의 인덱스를 반환 할 수 있기를 바랍니다.
목적 :
I는 고정 값 (55)으로부터 어긋나는 최소이다 X1 다섯 개 값들의 세트를 찾고, X2의 평균값에 대한 최대 값을 제공하려는 것이다.
여러 세트에 대해이 작업을 수행하고 싶습니다.
##### generating example data ##### this has five groups, each with two variables x1 and x2 set.seed(271828) grp <- gl(5,20) x1 <- round(rnorm(100,45, 12), digits=0) x2 <- round(rbeta(100,2,4), digits = 2) id <- seq(1,100,1) ##### this is how the data would arrive for me to analyze dat <- as.data.frame(cbind(id,grp,x1,x2))
자료는 각 요소에 대한 고유 식별자로
id
와,이 포맷에 도착할 것이다
> pick
mean.x k mean.y
[1,] 55 47 48 48 52 50 25 0.62 0.08 0.31 0.18 0.54 0.346
[2,] 55 48 48 47 52 50 25 0.62 0.31 0.18 0.48 0.54 0.426
제가 이들 요소의 id
값을 반환하고자 :
##### pulling out the first group for demonstration
dat.grp.1 <- dat[ which(grp == 1), ]
crit <- 55
x <- t(combn(dat.grp.1$x1, 5))
y <- t(combn(dat.grp.1$x2, 5))
mean.x <- rowMeans(x)
mean.y <- rowMeans(y)
k <- (mean.x - crit)^2
out <- cbind(x, mean.x, k, y, mean.y)
##### finding the sets with the least amount of discrepancy
pick <- out[ which(k == min(k)), ]
pick
##### finding the sets with low discrepancy and high values of y (means of X2) by "hand"
sorted <- out[order(k), ]
head(sorted, n=20)
pick
의 값에 대하여
, I는 X1의 값이라는 것을 알 수 그래서 나는 요소 3, 8, 10, 11, 18을 선택한다는 것을 안다. (k
과의 불일치가 같기 때문에 집합 2를 선택하지만 y
에 대한 평균은 높다. 어). 이 "손으로"이렇게
> dat.grp.1
id grp x1 x2
1 1 1 45 0.12
2 2 1 27 0.34
3 3 1 55 0.62
4 4 1 39 0.32
5 5 1 41 0.18
6 6 1 29 0.47
7 7 1 47 0.08
8 8 1 48 0.31
9 9 1 35 0.48
10 10 1 48 0.18
11 11 1 47 0.48
12 12 1 31 0.29
13 13 1 39 0.15
14 14 1 36 0.54
15 15 1 36 0.20
16 16 1 38 0.40
17 17 1 30 0.31
18 18 1 52 0.54
19 19 1 44 0.37
20 20 1 31 0.20
지금은 작동하지만, 가능한 한 "손 - 오프"로이 할 좋은 것입니다.
도움을 주시면 대단히 감사하겠습니다.
두 조건을 하나의 숫자로 결합하는 함수를 정의해야합니다. 그런 다음 최적을 찾는 방법에 대해 생각할 수 있습니다. – Thierry