根据条件使用两个变量之一中的一个值对新变量进行突变

时间:2020-05-06 06:19:52

标签: r dplyr

我有一个很大的数据集,我正在尝试创建一个新列,该列根据不同的场景合并变量1或变量2。我已经将不同的方案转换成组(“方案”列中的1到4)。

在变量1和2填充有特定样本的值的情况下,我需要变量1优先于New_Var列中的变量2(这是方案1)。对于特定样本,变量1具有一个值,变量2具有一个NA值,我需要使用变量1值在New_Var列中填充该样本(这是方案2)。其中变量1是NA,变量2是特定样本的值,我需要变量2来填充New_Var列(这是方案3)。在变量1和2均为不适用的情况下,我需要在New_Var列中报告不适用的结果。

对于每种情况,我已经能够使用dplyr对新列进行突变,但是不确定如何为下面的所需输出生成New_Var列。

Sample <- c('ID1','ID2','ID3','ID4','ID5','ID6','ID7','ID8','ID9','ID10','ID11') 
Var1 <- c(1,1,1,1.5,2.1,4,NA,NA,NA,NA,NA)
Var2 <- c(3,5,1,NA,NA,NA,1.6,1.4,2,NA,NA)
Scenario <- c(1,1,1,2,2,2,3,3,3,4,4)
New_Var <- c(1,1,1,1.5,2.1,4,1.6,1.4,2,0,0)
df <- data.frame(Sample,Var1,Var2,Scenario,New_Var)
df

   Sample Var1 Var2 Scenario New_Var
1     ID1  1.0  3.0        1     1.0
2     ID2  1.0  5.0        1     1.0
3     ID3  1.0  1.0        1     1.0
4     ID4  1.5   NA        2     1.5
5     ID5  2.1   NA        2     2.1
6     ID6  4.0   NA        2     4.0
7     ID7   NA  1.6        3     1.6
8     ID8   NA  1.4        3     1.4
9     ID9   NA  2.0        3     2.0
10   ID10   NA   NA        4     NA
11   ID11   NA   NA        4     NA

2 个答案:

答案 0 :(得分:3)

您可以使用coalesce处理上述4种情况。

library(dplyr)
df %>%  mutate(newvar = coalesce(Var1, Var2))

#   Sample Var1 Var2 Scenario newvar
#1     ID1  1.0  3.0        1    1.0
#2     ID2  1.0  5.0        1    1.0
#3     ID3  1.0  1.0        1    1.0
#4     ID4  1.5   NA        2    1.5
#5     ID5  2.1   NA        2    2.1
#6     ID6  4.0   NA        2    4.0
#7     ID7   NA  1.6        3    1.6
#8     ID8   NA  1.4        3    1.4
#9     ID9   NA  2.0        3    2.0
#10   ID10   NA   NA        4     NA
#11   ID11   NA   NA        4     NA

或在基本R / ifelse中使用dplyr

transform(df, newvar = ifelse(is.na(Var1), Var2, Var1))
df %>% mutate(newvar = if_else(is.na(Var1), Var2, Var1))

答案 1 :(得分:1)

我们可以使用fcoalesce中的data.table

library(data.table)
setDT(df)[, newvar := fcoalesce(Var1, Var2)]