查找R数据框中是否存在列,如果不存在,则创建该列

Nei*_*eil 2 r

我在R中有以下数据框

 no     qc6    qc5    qc3     itv6   itv5    itv3
123      12    12     14      8      9       9
Run Code Online (Sandbox Code Playgroud)

现在,我想检查数据框中是否存在以下列,如果没有,则创建一个值为0的新列.

 qc1,qc2,itv1,itv2
Run Code Online (Sandbox Code Playgroud)

我可以用R中的if循环来做

 if(!"qc1" %in% colnames(df))
 {
   df$qc1 <- 0
 }
Run Code Online (Sandbox Code Playgroud)

但是,我将不得不为每个要创建的变量编写循环.有没有更快的方法呢?

Aod*_*nOL 7

如果您有一个您知道应该包含的名称向量,则以下内容将检查它们是否已有列.如果没有,他们将创建一个值为0的人.

x <- c( "qc1","qc2","itv1","itv2", "no" )
d <- data.frame( no = 123,    qc6 = 12,    qc5 = 12,    qc3 = 14,     itv6 = 8,   itv5 = 9,    itv3 = 9)

d[x[!(x %in% colnames(d))]] = 0
d
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

 no     qc6    qc5    qc3     itv6   itv5    itv3    qc1    qc2    itv1    itv2
123      12    12     14      8      9       9       0      0      0       0
Run Code Online (Sandbox Code Playgroud)