我有一个很大的数据集,我正在尝试创建一个新列,该列根据不同的场景合并变量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
答案 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)]