条件に基づいて使用される条件と共式の表があります。
MTR CLD AF PI
AA AA AB 0.5/a (cond1)
AA AB AB 0.5/a (cond2)
AB AA AB 0.5 /a (cond3)
AA AA AA 1/a (cond4)
AB AA AA 1/a (cond5)
BB AB AA 1/a (cond6)
AB AB AA 1/(a+b) (cond7)
AB AB AB 1/(a+b) (cond8)
条件が一致しない場合は「NA」となります。
# table of conditions
MTR <- c("AA", "AA", "AB", "AA", "AB", "BB", "AB", "AB")
CLD <- c("AA", "AB", "AA", "AA", "AA", "AB", "AB", "AB")
AF <- c("AB", "AB", "AB", "AA", "AA", "AA", "AA", "AB")
PI <- c("0.5/a", "0.5/a", "0.5/a", "1/a", "1/a", "1/a",
"1/(a+b)", "1/(a+b)")
適用する 2 つのデータセットを次に示します。
# the dataset to be applied to
dataf <- data.frame (MTR = c("AB", "BB", "AB", "BB", "AB", "AA"),
CLD= c("AA", "AB", "AA", "AB", "AB", "AB"),
AF = c("AA", "AB", "BB", "AB", "BB", "AB")
)
MTR CLD AF
1 AB AA AA
2 BB AB AB
3 AB AA BB
4 BB AB AB
5 AB AB BB
6 AA AB AB
a = c(0.5, 0.4, 0.3, 0.5, 0.2, 0.4)
mapd <- data.frame(a = a, b = 1-a)
編集: 提案に従って、2 つのデータフレームを 1 つに結合できます: newdf <- data.frame (dataf, mapd)
MTR CLD AF a b
1 AB AA AA 0.5 0.5
2 BB AB AB 0.4 0.6
3 AB AA BB 0.3 0.7
4 BB AB AB 0.5 0.5
5 AB AB BB 0.2 0.8
6 AA AB AB 0.4 0.6
if else を作成することでこれを解決できると思いますが、これが唯一の (良い) 方法であるかどうかわからない条件がたくさんあります。
PI = NULL
if (dataf$MTR = "AA", dataf$CLD = "AA", dataf$AF = "AB") {
PI = 0.5/mapd$a } else {
if (dataf$MTR = "AA", dataf$CLD = "AB", dataf$AF = "AB"){
PI = 0.5/mapd$a
} else {
............. so on
これに代わるものはありますか?