有条件地从现有列创建新列

时间:2016-02-21 19:35:51

标签: r

我试图从一列数据中有条件地生成值,有条件地基于其中一列中的值。

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&lt; 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) - 直接从$ pao2移动,df $ aao2(NA,236.25,417.75)是使用aagrad函数计算的。

我对如何修复aasort的语法没有任何线索,而且我对使用sapply实际将条件操作应用于整个列完全没有信心。非常感谢协助。

1 个答案:

答案 0 :(得分: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