2016-02-21 2 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 Я хотел бы соответствующее значение РаО2 в той же строке, которые будут скопированы в новую колонку (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)) 

Ожидаемый выход будет ДФ $ pao2_raw со значениями (100, NA NA) - непосредственно перешли от $ РаО2 и ф.р. $ 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

Смежные вопросы