2016-02-21 67 views
0

我試圖有條件地從一列數據中有條件地生成值,並有條件地基於其中一列中的值。有條件地從現有列創建新列

fio2 <- c(0.25, 0.5, 0.8) 
pao2 <- c(100, 60, 90) 
paco2 <- c(35, 45, 45) 
df <- data.frame(fio2, pao2, paco2) 

如果FIO2 < 0.5我想的PaO2的同一行中的對應的值被複制到一個新的列(pao2_raw)。如果fio2> = 0.5,我想執行一個使用行中其他值的函數,然後將它存儲在一個新列(aao2)中。在我的實際數據中有很多數據點,並且通過數據集分散了相關的列。我的想法是:

#Function for when fio2 >= 0.5 
aagrad <- function(x) { 
(x * (705) - df$paco2/0.8) - df$pao2 
} 
#Sorting function 
aasort <- function(x) { 
    if (x < 0.5) { 
    df$pao2_raw <- df$pao2 
    } else { 
    aao2 <- aagrad(x) 
    } 
} 
#run function 
sapply(df$fio2, aasort(df$fio2)) 

預期產出將是DF $ pao2_raw用的值(100,NA,NA) - 直接從$動脈血氧分壓和df $ aao2移動(NA,236.25,417.75)這是使用aagrad函數計算的。

我沒有關於如何修正aasort語法的線索,我對使用sapply實際將條件操作應用於整個列沒有信心。和援助將不勝感激。

+0

什麼是預期的輸出? – mtoto

+0

編輯,謝謝。 – veldhoen

回答

1

似乎它可以定期分配和ifelse來完成:

df$pao2_raw = ifelse(df$fio2 < 0.5, df$pao2, NA) 
df$aao2  = ifelse(df$fio2 < 0.5, NA, aagrad(df$fio2)) 

df 

# fio2 pao2 paco2 pao2_raw aao2 
# 1 0.25 100 35  100  NA 
# 2 0.50 60 45  NA 236.25 
# 3 0.80 90 45  NA 417.75 
+0

謝謝,非常簡單。 – veldhoen