Dplyr变异许多列,每个新列以两个列为条件

时间:2019-05-20 15:12:55

标签: r dplyr mutate

我的数据框就像下面的简单框一样,具有更多的列和行。

我的目标是使用匹配的 pval value_IC 列,基于某些ifelse()输出,为每个“模型”添加一个新列。

在这里,模型是线性的,beta和emax。

到目前为止,我发现的最接近的问题是

https://community.rstudio.com/t/how-to-mutate-at-mutate-if-multiple-columns-using-condition-on-other-column-outside-vars-dplyr/17506/2

始终使用相同的“第二”列。

data <- data.frame(pval.linear.orig = c(0.01, 0.06, 0.02),
                   pval.beta.orig = c(0.06, 0.02, 0.01),
                   pval.emax.orig = c(0.03, 0.01, 0.07),
                   value_IC.linear.orig = c(-5, NA, -4),
                   value_IC.beta.orig = c(NA, NA, -10),
                   value_IC.emax.orig = c(NA, -11, NA))

  pval.linear.orig pval.beta.orig pval.emax.orig value_IC.linear.orig value_IC.beta.orig value_IC.emax.orig
1             0.01           0.06           0.03                   -5                 NA                 NA
2             0.06           0.02           0.01                   NA                 NA                -11
3             0.02           0.01           0.07                   -4                -10                 NA

如果我只想要一个模型,比如说beta版,我会这样做:

library(dplyr)
data_new <- data %>% mutate(conv.beta.orig = case_when(
  pval.beta.orig > 0.025~ NA,
  pval.beta.orig <= 0.025 & !(is.na(value_IC.beta.orig))  ~ TRUE,
  pval.beta.orig <= 0.025 & is.na(value_IC.beta.orig) ~ FALSE)) 

data_new

  pval.linear.orig pval.beta.orig pval.emax.orig value_IC.linear.orig value_IC.beta.orig value_IC.emax.orig conv.beta.orig
1             0.01           0.06           0.03                   -5                 NA                 NA             NA
2             0.06           0.02           0.01                   NA                 NA                -11          FALSE
3             0.02           0.01           0.07                   -4                -10                 NA           TRUE

以获得 conv.beta.orig 列。列名不必完全采用这种格式。

我现在的问题是使用上面的pval.MODEL.orig和value_IC.MODEL.orig列使用的所有模型都这样做。

非常感谢您的帮助! 这是我有史以来提出的第一个问题,如果我应该重新编写某些内容/错过某些内容或在已经存在的情况下未发现此问题等,请让我现在。

0 个答案:

没有答案