其他環路我的條件和coformula一個表:替代的號碼,如果r中
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)")
這裏有兩個數據集的應用:
# 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)
編輯:下面的建議下,我可以在這兩個dataframes合而爲一: 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
有沒有其他辦法呢?
可以看看向量化的'ifelse()','switch()'也許對你有好處。 – Chase
你的測試'dataf對象有很多行,沒有可能匹配你的條件表和coformulae表。 –
@DWin謝謝,我忘記提及,如果沒有匹配,NA將被輸出...最後的其他條件 – SHRram